本文共 664 字,大约阅读时间需要 2 分钟。
#include#include #include #include using namespace std;vector vec[1001],t;int vis[1001],cnt=0;void dfs(int tmp){ if(vis[tmp]==0) { vis[tmp]=1; t.push_back(tmp); cnt++; } for(int i=0;i >n>>m>>start; while(m--) { int x,y; cin>>x>>y; vec[x].push_back(y); vec[y].push_back(x); } for(int i=1;i<=n;i++) sort(vec[i].begin(),vec[i].end()); dfs(start); int flag=0; for(int i=0;i
本题使用深度遍历,同时使用了vector向量组存储相关信息
如果你是在深度遍历后将输出的结果反向输出,那就无法通过后两个节点。
在我们仔细审题后,发现这道题的本意是回溯,那么我们正好可以在递归中实现回溯,即在每个dfs后,将目标值压入向量t中
代码如下:
dfs(vec[tmp][i]);t.push_back(tmp);
转载地址:http://hpfl.baihongyu.com/