数据大时矩阵不够 这时用邻接表;
指针类型的邻接表
1 /*邻接表*/ 2 #include<stdio.h> 3 #include<string.h> 4 #include<iostream> 5 struct arcnode//边结点 6 { 7 int vertex;//与表头定点相邻的顶点编号 8 int weight;//边的权值 9 arcnode *next;//指向下一条边 10 }; 11 struct vernode//顶点结点 12 { 13 int vex;//顶点编号 14 arcnode *firarc;//边 15 }ver[1000]; 16 int n; 17 void inint() 18 { 19 int i; 20 for(i=1;i<=n;i++) 21 { 22 ver[i].vex=i; 23 ver[i].firarc=NULL; 24 } 25 } 26 void add(int x,int y,int z) 27 { 28 int i,j; 29 arcnode *p; 30 p=new arcnode(); 31 p->vertex=y; 32 p->weight=z; 33 p->next=NULL; 34 if(ver[x].firarc==NULL) 35 { 36 ver[x].firarc=p; 37 } 38 else 39 { 40 while(ver[x].firarc->next!=NULL) 41 { 42 if(ver[x].firarc->vertex==y)//检查有重复 43 { 44 if(ver[x].firarc->weight>z) 45 ver[x].firarc->weight=z; 46 return; 47 } 48 ver[x].firarc=ver[x].firarc->next; 49 } 50 ver[x].firarc->next=p; 51 return; 52 } 53 } 54 int main() 55 { 56 int i,j; 57 scanf("%d",&n); 58 inint(); 59 for(i=1;i<=6;i++) 60 { 61 int x,y,z; 62 scanf("%d%d%d",&x,&y,&z); 63 add(x,y,z); 64 add(y,x,z); 65 } 66 }
/*
就是一副画 然后就很好懂了
@1->#->#->null
@2->#->#->#->null
@3->#->null
类似如此的画
*/
1 /*******--------*******/ 2 /*静态邻接表*/ 3 4 #include<stdio.h> 5 #include<string.h> 6 struct node 7 { 8 int v;//后面点 9 int w;//权 10 int next;//记录同一起点的下一条边的位置 11 }edge[200005]; 12 13 int n,m,dis[53003];//dis[]放长度 14 int vis[53003];//标记 15 16 int index;//表示位置 17 18 int pre[53003];//开始的顶点 19 20 void add(int x,int y,int z) 21 { 22 edge[index].v=y;//后面那个点 23 edge[index].w=z;//edge[].w表示权值 24 edge[index].next=pre[x];//保存x起点的上一条边在edge数组中的位置 25 pre[x]=index++;//更新 26 //以下为无向图 27 /*edge[index].v=x; 28 edge[index].w=z; 29 edge[index].next=pre[y]; 30 pre[y]=index++;*/ 31 32 } 33 34 struct Node 35 { 36 int point,dist; 37 bool operator<(const Node x) const //优先队列的自定义(这里最小的,可以发现大小号) 38 { 39 return x.dist<dist; 40 } 41 }; 42 int main() 43 { 44 int i,j,t; 45 scanf("%d",&t); 46 while(t--) 47 { 48 scanf("%d %d",&n,&m); 49 index=1; 50 memset(vis,0,sizeof(vis)); 51 memset(pre,-1,sizeof(pre)); 52 for(i=0;i<m;i++) 53 { 54 int x,y,z; 55 scanf("%d %d %d",&x,&y,&z); 56 if(x==y)continue; 57 add(x,y,z); 58 } 59 } 60 }