【个人模板】图的广度,深度优先遍历

来源:互联网 发布:wap淘宝是什么访客 编辑:程序博客网 时间:2024/05/23 05:07
#include<stdio.h>  #include<bits/stdc++.h>  using namespace std;  int vis[101];  int a[101][101];  int n,m,sum;//n个点,m条边  void dfs(int s)  {      printf("%d ",s);      sum++;      if(sum==n)          return;      for(int i=1; i<=n; i++)      {          if(a[s][i]&&!vis[i])          {              vis[i]=1;              dfs(i);          }      }  }  void bfs()  {      memset(vis,0,sizeof(vis));      queue<int>k;      for(int i=1; i<=n; i++)      {          if(!vis[i])          {              vis[i]=1;              printf("%d ",i);          }          k.push(i);          while(!k.empty())          {              int t=k.front();              k.pop();              for(int j=1; j<=n; j++)              {                  if(!vis[j]&&(a[j][t]==1||a[t][j]==1))                  {                      vis[j]=1;                      printf("%d ",j);                      k.push(j);                  }              }          }      }  }  int main()  {      while(scanf("%d%d",&n,&m)==2)      {          for(int i=1; i<=n; i++)          {              for(int j=1; j<=n; j++)              {                  if(i==j)                      a[i][j]=0;                  else                      a[i][j]=-1;              }          }          int x,y;          for(int i=0; i<m; i++)          {              scanf("%d%d",&x,&y);              a[x][y]=1;              a[y][x]=1;          }          vis[1]=1;          sum=0;          printf("dfs:\n");          dfs(1);          printf("\nbfs:\n");          bfs();          printf("\n");          for(int i=1; i<=n; i++)          {              for(int j=1; j<=n; j++)              {                  printf(" %d到%d的距离:%d ",i,j,a[i][j]); ///-1表示无法到达              }              printf("\n");          }      }  }  

原创粉丝点击