关于邻接表的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
}
#include<iostream>//读入,并输出2
using namespace std;3

4
const long LMAX=2000;5
struct node6
{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]=index22
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
}



浙公网安备 33010602011771号