package Graph; import java.util.Scanner; public class Main { public static void main(String[] args) { VMGragh g = new VMGragh(); CreateVMGragh(g); System.out.println("DFS遍历结果:"); DFS(g,1); } static int[] visited = new int[10] ; public static void DFS(VMGragh G,int v){ int i,j,index = -1,w; for(i=0;i<G.v_num;i++){ if(G.vNodes[i].data==v){ index = i; } } System.out.printf("%d->",v); visited[index] = 1; ENode p = new ENode(); p = G.vNodes[index].Efirst; while(p!=null){ w= p.Vindex; if(visited[w] != 1){ DFS(G,G.vNodes[w].data); } p = p.next; } } public static int CreateVMGragh(VMGragh g){ Scanner sc=new Scanner(System.in); System.out.println("请输入顶点数和边数:"); g.v_num = sc.nextInt(); g.e_num = sc.nextInt(); System.out.println("输入顶点的值:"); for (int i = 0;i<g.v_num; i++){ VNode vNode = new VNode(); g.vNodes[i] = vNode; g.vNodes[i].data = sc.nextInt(); g.vNodes[i].Efirst = null; } for (int k = 0;k<g.e_num;k++){ System.out.println("请输入相连的两个点:"); int v1 = sc.nextInt(); int v2 = sc.nextInt(); int i = getArrayIndex(g,v1); int j = getArrayIndex(g,v2); ENode enode = new ENode(); enode.Vindex = j; enode.next = g.vNodes[i].Efirst; g.vNodes[i].Efirst = enode; } return 1; } //该方法返回数组的下表 public static int getArrayIndex(VMGragh g,int v){ int index =-1; for (int i = 0;i<g.v_num;i++){ if(g.vNodes[i].data == v){ index = i; break; } } return index; } } //图的存储结构 class VMGragh{ public VNode[] vNodes =new VNode[10]; public int v_num,e_num; } //边的存储结构 class ENode { int Vindex; ENode next; } //顶点的存储结构 class VNode{ int data; ENode Efirst; }