• 模板 图的遍历 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
  • 相关阅读:
    Linux 如何通过命令查看一个文件的某几行(中间几行或最后几行)
    linux 定义变量 ,添加变量值
    Linux下的vi编辑命令中查找·替换详解
    linux vi 块操作、多窗口
    linux 磁盘 分区、格式化、挂载
    linux 重名名、删除文件操作
    linux vi
    linux 文件查阅 cat、more、less、tail
    linux ls touch、umask、 chattr
    linux 目录配置
  • 原文地址:https://www.cnblogs.com/sssy/p/6686265.html
Copyright © 2020-2023  润新知