1 import java.util.Scanner; 2 import java.util.LinkedList; 3 import java.util.LinkedList; 4 import java.util.Scanner; 5 import java.util.TreeSet; 6 import java.util.Scanner; 7 8 public class One { 9 public static void main(String args[]) { 10 int n, m; 11 Scanner scanner = new Scanner(System.in); 12 System.out.println("请输入顶点数和边数"); 13 n = scanner.nextInt(); 14 m = scanner.nextInt(); 15 B a[] = new B[m+1];//存放各条边的两个顶点及它们的权值 16 int first[]=new int[n+1];//first[i]存放顶点i的第一条边的编号 17 int next[]=new int[m+1];//next[m]存放编号为m的边的下一条边的编号 18 //领接表建立(数组模拟),领接表是从表头插入的,倒序遍历 19 System.out.println("各条边:"); 20 for(int i=1;i<=m;i++){ 21 a[i]=new B(scanner.nextInt(),scanner.nextInt(),scanner.nextInt()); 22 next[i]=first[a[i].u]; 23 first[a[i].u]=i;//存放点a[i].u的第一条边(倒序)的序号 24 25 } 26 //领接表遍历(按照点的顺序) 27 System.out.println("遍历结果:"); 28 for(int i=1;i<=n;i++){//遍历n个顶点出发的边 29 int k=first[i],j=0;//令k等于i点的第一条边 30 while(k!=0){// 31 System.out.println(a[k].u+" "+a[k].v+" "+a[k].w); 32 k=next[k]; 33 } 34 } 35 } 36 } 37 38 class B {//存放一条边的信息(边的起点、末点、权值) 39 int u, v, w; 40 41 B(int u, int v, int w) { 42 this.u = u; 43 this.v = v; 44 this.w = w; 45 } 46 }
结果:
领接表存储图理解图解: