题目:




代码:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#define maxn 11111
using namespace std;
vector<int> a[maxn];
int x,y;
int n,m,s;
int ans[maxn];
int cnt=1,res=1;
bool visited[maxn];
int dfs(int x)
{
if(visited[x]) return 0;
ans[cnt]=x;
cnt++;
visited[x]=true;
for (auto to:a[x])
{
if (dfs(to))
{
ans[cnt]=x;
cnt++;
}
}
return 1;
}
int main()
{
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
cin>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
for(int i=1;i<=n;i++) sort(a[i].begin(),a[i].end());
dfs(s);
for(int i=1;i<=n;i++)
{
if(visited[i]==0)
{
res=0;
break;
}
}
//cout<<"res="<<res<<endl;
for(int i=1;i<cnt;i++) cout<<ans[i]<<" ";
if(res==0) cout<<0<<endl;
return 0;
}
本文介绍了一段使用C++编写的代码,展示了如何通过深度优先搜索算法遍历图,从给定的起始节点s开始,并处理未访问节点。重点在于dfs函数的实现和整体流程控制。
1053

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



