关于邻接表的Sample代码

从月光大牛那抢来的代码 研究了一晚上 把注释都补上了 邻接表真是强大哈

 

 

 1 #include < iostream > // 读入,并输出
 2 using   namespace  std;
 3
 4 const   long  LMAX = 2000 ;
 5 struct  node
 6 {
 7    int v;
 8    int next;
 9}
s[LMAX]; //
10 int  p[LMAX]; // 点对应下标 值为边
11 int  Index,m,n,x,y; // m点数,n边数
12
13 void  init()
14 {
15    memset(p,-1,sizeof(p));
16    Index=0;
17    for(int i=0;i<n;i++)
18    {
19        scanf("%d%d",&x,&y);
20        s[Index].next=p[x];//保存原先x所在边的序号      
21        s[Index].v=y;//设置另一端的点             (x)----------->(y)   p[x]=index
22        p[x]=Index++;// 更新并记录点x所在边序号为当前边 (index)
23        //上述操作将一个自该点出发而邻接的有向边链接成表
24    }

25}

26
27 void  print()
28 {
29    for(int i=0;i<m;i++)
30    {
31        printf("%d:",i);
32        for(int j=p[i];j!=-1;j=s[j].next)
33            printf(" -> %d",s[j].v);
34        printf("\n");
35    }

36}

37
38 int  main()
39 {
40    while(scanf("%d%d",&m,&n)!=EOF)
41    {
42        init();
43        print();
44    }

45    return 0;
46}

你可能感兴趣的:(sample)