有时候,二维数组开不了那么大,动态的构建邻接表容易出错,此时需要借助静态邻接表。
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 const long edge_maxn = 1005; //边的最大上限 7 const long point_maxn = 105; //点的最大上限 8 struct node 9 { /*node存储边,一个edge代表一条边*/10 int v; //终点位置11 int w; //权值12 int next; //同一起点的下一条边存储在edge数组中的位置(理解了这个静态邻接表就可以了)13 }edge[edge_maxn];14 int pre[point_maxn]; //以该点为起点的第一条边存储在edge数组中的位置15 int n; //点的数量16 int m; //边的数量17 void Init()18 {19 memset(pre,-1,sizeof(pre));20 int Index = 1;21 int i,x,y,w;22 for(i=0;i %d value is %d ",edge[j].v,edge[j].w);40 }41 printf("\n");42 }43 }44 int main()45 {46 while(scanf("%d%d",&n,&m)!=EOF && (n!=0 || m!=0))47 {48 Init();49 print();50 }51 return 0;52 }
静态邻接表关键是next与pre数组的构造。让我想起了关于kmp,next数组的构造,树状数组,dijkstr借东风的构造。这些构造都相互链接,互相关联,变化万千奇妙无穷啊!!!(话说,树状数组又忘了,qwq).