#include<iostream>//读入,并输出
using namespace std;

const long LMAX=2000;
struct node


{
int v;
int next;
}s[LMAX];//边
int p[LMAX];//点对应下标 值为边,记录该点第一条边号,类似表头
int Index,m,n,x,y;//m点数,n边数

void init()


{
memset(p,-1,sizeof(p));
Index=0;
for(int i=0;i<n;i++)

{
scanf("%d%d",&x,&y);
s[Index].next=p[x];//保存原先x所在边的序号,链表连接
s[Index].v=y;//设置另一端的点 (x)----------->(y) p[x]=index
p[x]=Index++;// 更新并记录点x所在边序号为当前边 (index)
//上述操作将一个自该点出发而邻接的有向边链接成表
}
}

void print()


{
for(int i=0;i<m;i++)

{
printf("%d:",i);
for(int j=p[i];j!=-1;j=s[j].next)//遍历所有边
printf(" -> %d",s[j].v);
printf("\n");
}
}

int main()


{
while(scanf("%d%d",&m,&n)!=EOF)

{
init();
print();
}
return 0;
}
posted @
2008-08-04 10:31
随风逐云
阅读(
270)
评论()
收藏
举报