#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
queue<int> q;
struct Graph
{
int vertex[50]={0};
int edge[50][50]={{0,0}};
int ne,nv;
}g;
int visited[50]={0};
void DFS(Graph G,int v)
{
if(!visited[v])
{
visited[v]=1;
cout<<G.vertex[v];
for(int i=0;i<G.nv;i++)
if(!visited[i]&&G.edge[v][i])
DFS(G,i);
}
}
void BFS(Graph G,int v)
{
int tmp;
if(!visited[v])
{
q.push(G.vertex[v]);
visited[v]=1;
}
while(!q.empty())
{
cout<<q.front();
tmp=q.front();
q.pop();
for(int i=0;i<G.nv;i++)
{
if(!visited[i]&&G.edge[tmp][i])
{
q.push(G.vertex[i]);
visited[i]=1;
}
}
}
}
int main()
{
int a,b;
cin>>g.nv>>g.ne;
for(int i=0;i<g.nv;i++)
g.vertex[i]=i;
for(int i=0;i<g.ne;i++)
{
cin>>a>>b;
g.edge[a][b]=g.edge[b][a]=1;
}
DFS(g,0);
memset(visited,0,50);
cout<<endl;
BFS(g,0);
cout<<endl;
return 0;
} 图的BFS,DFS(邻接表)
图遍历算法详解
最新推荐文章于 2024-11-12 20:35:27 发布
本文详细介绍了图遍历算法中的两种主要方法:深度优先搜索(DFS)和广度优先搜索(BFS)。通过具体的C++代码实现展示了如何利用这两种算法进行图的遍历,并给出了完整的程序示例。

700

被折叠的 条评论
为什么被折叠?



