用队列实现BFS

 
 

#include <iostream> #include <queue> using namespace std; static const int N=100; static const int WHITE=0; static const int GRAY=1; static const int BLACK=2; int n,M[N][N]; int d[N],f[N],color[N],time; void BFS(int s) {     queue<int> q;     q.push(s);     for(int i=0;i<n;i++) d[i]=INT_MAX;     d[s]=0;     int u;     while(!q.empty())     {         u=q.front();         q.pop();         for(int v=0;v<n;v++)         {             if(d[v]!=INT_MAX) continue;//这段代码是必不可少的,因为图中可能存在一个结点被多个结点所指的情况             if(M[u][v])             {                 q.push(v);                 d[v]=d[u]+1;             }             else continue;         }     } } int main() {    int u,k,v;    cin>>n;    for(int i=0;i<n;i++)     for(int j=0;j<n;j++)    {        M[i][j]=0;    }    for(int i=0;i<n;i++)    {        cin>>u>>k;        for(int j=0;j<k;j++)        {            cin>>v;            M[u-1][v-1]=1;        }    }    BFS(0);    for(int i=0;i<n;i++) cout<<i+1<<" "<<((d[i]==INT_MAX)?(-1):d[i])<<endl;    return 0; }

猜你喜欢

转载自blog.csdn.net/chengsilin666/article/details/79189025