首页 > 代码库 > 模板 图的遍历 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 }
View Code

深搜 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 }
View Code

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 }
View Code

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 }
View Code

 

模板 图的遍历 bfs+dfs 图的最短路径 Floyed+Dijkstra