关于邻接表的Sample代码

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

 

 

 1#include<iostream>//读入,并输出
 2using namespace std;
 3
 4const long LMAX=2000;
 5struct node
 6{
 7    int v;
 8    int next;
 9}
s[LMAX];//
10int p[LMAX];//点对应下标 值为边
11int Index,m,n,x,y;//m点数,n边数
12
13void 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
27void 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
38int main()
39{
40    while(scanf("%d%d",&m,&n)!=EOF)
41    {
42        init();
43        print();
44    }

45    return 0;
46}
posted @ 2008-07-25 13:38  Hdu-Lost  阅读(466)  评论(0编辑  收藏  举报