初级BFS

【模板】:输入n个顶点,m条边。 接下来输入每一条边的两个顶点。 输出遍历的顺序。

#include<iostream>
#include<queue>
bool book[100];//bool mark[100];
int t[500][500];//int ljjz[500][500];
using namespace std;
int n,m;

int main()
{
    int x,y;
    int u;
    cin>>n>>m;
    for(int i=0;i<m;i++){
        cin>>x>>y;
        t[x][y]=t[y][x]=1;
    }
    queue<int>q;
    q.push(1);//将一号顶点压入队列
    book[1]=true;//标记一号顶点已被访问
    cout<<1<<endl;//输出访问的顶点
    while(!q.empty()){//当队列不为空进行循环
        u=q.front();//u是队首元素
        for(int i=1;i<=n;i++){//遍历每一个顶点
            if(!book[i]&&t[u][i]){//如果该顶点与当前顶点u之间有边且未被访问过
                cout<<i<<endl;//输出访问到的顶点
                book[i]=1;//标记它已经被访问过了
                q.push(i);//将此点推入队列
            }
        }
        q.pop();//顶点u出队
    }
}
posted @ 2018-05-31 20:29  Roni_i  阅读(107)  评论(0编辑  收藏  举报