首页 > 代码库 > 模板 图的遍历 bfs+dfs 图的最短路径 Floyed+Dijkstra
模板 图的遍历 bfs+dfs 图的最短路径 Floyed+Dijkstra
广搜 bfs
1 //bfs 2 3 #include<iostream> 4 #include<cstdio> 5 using namespace std; 6 int queue[1001],top=0,end=1; 7 int map[1001][1001]; 8 int vis[1001]; 9 int n,m;10 void bfs(int p)11 {12 queue[end]=p;13 vis[p]=1;14 printf("%c -->",queue[end]+64);15 while(top!=end)16 { 17 top++;18 int k=queue[top];19 for(int i=1;i<=n;i++)20 {21 22 if(vis[i]==0&&map[k][i]==1)23 {24 printf("%c-->",i+64);25 queue[++end]=i;26 vis[i]=1;27 }28 }29 }30 }31 int main()32 {33 char head,tail;34 scanf("%d%d",&n,&m);35 for(int i=1;i<=m;i++)36 {37 cin>>head>>tail;38 head=head-64;39 tail=tail-64;40 map[head][tail]=map[tail][head]=1;41 }42 bfs(1);43 return 0;44 }
深搜 dfs
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 char maps[10][11]; 5 bool vis[1000]; 6 int q,m; 7 void dfs(int a){ 8 vis[a]=1; 9 if(a<q)10 printf("%c --> ",a+64);11 else printf("%c",a+64);12 for(int i=1;i<=q;i++)13 {14 if(maps[a][i]==1&&vis[i]==0)15 dfs(i);16 }17 }18 int main()19 {20 21 char a,b;22 cin>>q>>m;23 for(int i=1;i<=m;i++)24 {25 cin>>a>>b;26 maps[a-64][b-64]=1;27 maps[b-64][a-64]=1;28 }29 dfs(1);30 }
Floyed
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int maps[1001][1001]; 6 int ans; 7 int main() 8 { 9 memset(maps,999999,sizeof(maps));10 int n,m;11 cin>>n>>m;12 int he,ta,len;13 for(int i=1;i<=m;i++)14 {15 cin>>he>>ta>>len;16 maps[ta][he]=maps[he][ta]=len;17 }18 int x,y;19 cin>>x>>y;20 for(int k = 1;k <= n;k++)21 for(int i = 1;i <= n;i++)22 for(int j = 1;j <= n;j++)23 {24 if(maps[i][j]>maps[i][k]+maps[k][j])25 maps[i][j]=maps[i][k]+maps[k][j];26 }27 28 printf("%d",maps[x][y]);29 }
Dijkstra
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 using namespace std; 6 int n,m; 7 const int maxn=9999999; 8 int map[1001][1001],start,end; 9 bool vis[1001];10 int dis[1001],road[1001],minn,k;11 12 void add(int now)13 {14 for(int i=1;i<=n;i++)15 {16 dis[i]=map[now][i];17 }18 vis[now]=true;19 dis[now]=0;20 for(int i=1;i<=n-1;i++)21 {22 minn=maxn;23 k=now;24 for(int j=1;j<=n;j++)25 if(vis[j]==false&&dis[j]<minn)26 {27 minn=dis[j];28 k=j;29 }30 vis[k]=true;31 for(int g=1;g<=n;g++)32 if(vis[g]==false&&dis[g]>dis[k]+map[k][g])33 {34 dis[g]=dis[k]+map[k][g];35 }36 }37 printf("%d",dis[end]);38 return ;39 40 }41 int main()42 {43 memset(map,maxn,sizeof(map));44 memset(vis,false,sizeof(vis));45 scanf("%d%d",&n,&m);46 int he,ta,len;47 for(int i=1;i<=m;i++)48 {49 scanf("%d%d%d",&he,&ta,&len);50 map[ta][he]=map[he][ta]=len;51 }52 memset(dis,maxn,sizeof(dis));53 cin>>start>>end;54 add(start);55 return 0;56 }
模板 图的遍历 bfs+dfs 图的最短路径 Floyed+Dijkstra
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。