两行代码,了解了一个小时! 两个数组记录邻接表! ( 刘汝佳白书)
两行代码,理解了一个小时! 两个数组记录邻接表! ( 刘汝佳白书)
#include<iostream> #include<algorithm> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<queue> #include<math.h> #include<set> #include<vector> #define MAXN 15 #define INF 1000 int main() { int i,j,n,m,t,c; int first[MAXN]; int u[MAXN],v[MAXN],w[MAXN],next[MAXN]; scanf("%d%d",&n,&m); for(i=0;i<=n;i++) first[i]=-1; for(i=0;i<m;i++) { scanf("%d%d",&u[i],&v[i]);//u是弧尾,v弧头 next[i]=first[u[i]];//就这万恶的两行 first[u[i]]=i;//短小精悍! } //后面为自己理解后添加的。 for(i=1;i<=n;i++) { if(first[i]==-1) { printf("没有以点<%d>为起点的邻接表。\n",i); continue; } printf("以点<%d>为起点的邻接表:\n",i); for(j=first[i];j!=-1;j=next[j]) { printf("<%d %d> ",i,v[j]); } printf("\n\n"); } return 0; }