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; }
[算法]寻找能与所有顶点连通的顶点
最新推荐文章于 2025-12-05 17:02:52 发布
本文介绍了一种基于深度优先搜索的图遍历算法实现。通过定义顶点和边的数据结构,构建邻接表来表示图,并实现了从图中找出一个孤立强连通分量的起点。文章提供了一个具体的图实例,展示了如何初始化图结构并进行遍历。
168万+

被折叠的 条评论
为什么被折叠?



