数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

    xiaoxiao2025-10-31  0

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

    代码如下:

    #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; }

    转载请注明原文地址: https://ju.6miu.com/read-1303717.html
    最新回复(0)