-----图论建图:模板

xiaoxiao2021-02-27  377

临接表建图: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int N,M; struct node { int to,w; }; vector<node>G[105]; int main() { int i,j,x,y,z; scanf("%d%d",&N,&M); { scanf("%d%d%d",&x,&y,&z); G[x].push_back((node){y,z}); } for(i=1;i<=N;i++) for(j=0;j<G[i].size();j++) printf("%d %d %d\n",i,G[i][j].to,G[i][j].w); } 链式前向星: #include <iostream> #include<stdio.h> #include<vector> #include<cstring> using namespace std; int n,m; struct node { int to,w,next; } G[105]; int head[105]; int main() { int x,y,z; cin>>n>>m; memset(head,-1,sizeof(head)); for(int i=0; i<m; i++) { cin>>x>>y>>z; G[i].to=y; G[i].w=z; G[i].next=head[x]; head[x]=i; } for(int i=1; i<=n; i++) { for(j=head[i]; j!=-1; j=G[i].next)///haed[i]记录的是当前顶点为i的输入时最后一条边的位置, ///G[i].next记录的是同样顶点为i的上一条边的位置,当G[i].next-1时,说明顶点为i的边已经全部输出完了 printf("%d %d %d\n",i,G[j].to,G[j].w);0 } } 链式前向星的代码实现过程: 样例:M=5 x y z 1 2 3 2 3 4 2 4 3 4 5 6 4 1 2 for(int i=0;i<M;i++) { G[0].to=2; G[0].w=3; G[0].next=head[1]=-1; head[1]=0; G[1].to=3; G[1].w=4; G[1].next=head[2]; head[2]=1; G[2].to=4; G[2].w=3; G[2].next=head[2]=1; head[2]=2; G[3].to=5; G[3].w=6; G[3].next=head[4]=-1; head[4]=3; G[4].to=1; G[4].w=2; G[4].next=head[4]=3; head[4]=4; } for(int i=1;i<=n;i++) for(int j=head[i];j!=-1;j=G[i].next) { i=1; j=head[1]=0; G[1].to; G[1].w; G[1].next=-1; i=2; j=head[2]=2; G[2].to; G[2].w; G[2].next=1;(G[2].next!=-1) G[1].to; G[1].w; G[1].next=-1; i=3; head[3]=-1; i=4; head[4]=4; G[4].to; G[4].w; G[4].next=3;(G[4].next!=-1); G[3].to; G[3].w; G[3].next=-1; }
转载请注明原文地址: https://www.6miu.com/read-4628.html

最新回复(0)