本文主要是介绍Nyoj 20 吝啬的国度[dfs],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:点击打开链接
开始的时候,思路是有的。就是纯粹的深搜。当然广搜也是可以的。本博客仅讲解深搜用法。
由于这是一棵生成树,所以,从出发点到达每个结点的路径是唯一的。
直接深搜就可以。
需要注意的一点是,每个路径都是无向的。为此在陪送了一次WA。
#include <cstdio>
#include <cstring>
#include <stack>
#include <vector>
#include <algorithm>
#define CLR(arr,val) memset(arr,val,sizeof(arr))
using namespace std;const int N=100003;
int n,s,ans[N];
vector<int> map[N];int dfs(int s){for(int i=0;i<map[s].size();i++){if(ans[map[s][i]]==-1){//深搜写的很好,但是不是自己写的.ans[map[s][i]]=s;dfs(map[s][i]);}}
}int main()
{
// freopen("input.txt","r",stdin);int T;scanf("%d",&T);while(T--){CLR(ans,-1);CLR(map,0);int a,b;scanf("%d%d",&n,&s);for(int i=1;i<=n-1;i++){scanf("%d%d",&a,&b);map[a].push_back(b);map[b].push_back(a);}dfs(s);ans[s]=-1;for(int i=1;i<=n;i++){printf("%d%c",ans[i],i==n?'\n':' ');}}return 0;
}
的确,深搜写的很好,不过,自己就是没有写出来。
感觉应该是,对于深搜和回溯理解的不是太深刻,自己写不出的深搜也是在情理之中的。
要多加练习,多写才能自己 写出来。
这篇关于Nyoj 20 吝啬的国度[dfs]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!