您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验之图论二:基于邻接表的广度优先搜索遍历

2016-08-16 08:46 531 查看


这道题的算法思想主要是利用邻接矩阵来存储图的顶点和边的关系,然后利用递归的思想,访问完与当前顶点相关的顶点后,再退回上一步,继续操作与上一顶点相关的顶点和边。

代码如下:

#include <bits/stdc++.h>

using namespace std;

int v[110];

int arc[110][110];

void BFS(int k,int t){/*广度优先遍历函数

    int flag=0;

    queue<int> q;//建立一个辅助队列;

    q.push(t);//将开始遍历的顶点入队;

    while(!q.empty()){//当前队列不为空;

        int p=q.front();

        q.pop();

        for(int i=0;i<k;i++){

            if(arc[p][i]&&!v[p]){

                q.push(i);//将与当前顶点相邻且未被访问过的顶点入队

                arc[p][i]=arc[i][p]=0;

            }

        }

        if(!v[p]){

            if(!flag){

                cout<<p;

                flag=1;

            }

            else{

                cout<<" "<<p;

                v[p]=1;//标记已经访问过的顶点;

            }

        }

    }

}

int main(){

    int n,k,m,t,u,s;

    cin>>n;

    while(n--){

        memset(v,0,sizeof(v));//将数组置0;

        memset(arc,0,sizeof(arc));

        cin>>k>>m>>t;

        for(int i=0;i<m;i++){/*构建邻接矩阵

            cin>>u>>s;

            arc[u][s]=arc[s][u]=1;

        }

        BFS(k,t);

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐