[算法]寻找能与所有顶点连通的顶点

本文介绍了一种基于深度优先搜索的图遍历算法实现。通过定义顶点和边的数据结构,构建邻接表来表示图,并实现了从图中找出一个孤立强连通分量的起点。文章提供了一个具体的图实例,展示了如何初始化图结构并进行遍历。

package com.LiangFei; import java.util.Scanner; class VexNode{ char vertex; ArcNode firstedge; } class ArcNode{ int adjnode; ArcNode next; } /* * 算法不是高校,只用了深度遍历 */ public class Graph{ public static void main(String[] args){ int n = 5; int e = 5; char[] vertex = {'A', 'B', 'C', 'D', 'E'}; int[][] edge = {{0, 1}, {1, 2}, {2, 3}, {1, 3}, {1, 4}, {2, 4}}; Graph G = new Graph(vertex, n, edge, e); System.out.println(G.getS()); } public Graph(char[] vertex, int n, int[][] edge, int e){ nodes = n; edges = e; visited = new boolean[nodes]; //创建邻接矩阵 adjlist = new VexNode[n]; for (int i = 0; i < n; i++){ adjlist[i] = new VexNode(); adjlist[i].vertex = vertex[i]; adjlist[i].firstedge = null; } for (int i = 0; i < edges; i++){ // Scanner sc = new Scanner(System.in); // int u = sc.nextInt(); // int v = sc.nextInt(); int u = edge[i][0]; int v = edge[i][1]; ArcNode an = new ArcNode(); an.adjnode = v; an.next = adjlist[u].firstedge; adjlist[u].firstedge = an; } } public char getS(){ int i = 0; for (; i < nodes; i++){ initVisited(); explore(i); int j = 0; for (; j < nodes && visited[j]; j++); if (j >= nodes) break; } if (i >= nodes){ return 'N'; } return adjlist[i].vertex; } private void initVisited(){ for (int i = 0; i < nodes; i++){ visited[i] = false; } } private void explore(int v){ visited[v] = true; ArcNode an = adjlist[v].firstedge; while (an != null){ int u = an.adjnode; if (!visited[u]){ explore(u); } an = an.next; } } private VexNode[] adjlist; private boolean[] visited; private int nodes; private int edges; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值