作者附:本天为DFS专题 不予分类

T1小W选数字

题目传送门

总结

被题目坑了,输出时应在每个数后面输出两个空格,我是正常输出的(在每个数后面输出空格)没有认真仔细看题,以后要认真看题

思路

全排列模板题

附代码

#include<bits/stdc++.h>
using namespace std;
int n,r,x[110];
void dfs(int s,int w)
{
	if(s==r){
		for(int i=1;i<=r;i++){
			cout<<"  "<<x[i];
		}
		cout<<endl;
		return;
	}
	for(int i=w;i<=n-(r-s)+1;i++){
		x[s+1]=i;
		dfs(s+1,i+1);
		x[s+1]=0;
	}
	return;
}
int main()
{
	freopen("xsz.in","r",stdin);
	freopen("xsz.out","w",stdout);
	cin>>n>>r;
	dfs(0,1);
    return 0;
}

T2小W玩接龙1

题目传送门

总结(自己)

理解错了题意 以为接完i龙后1~i-1就都不能接了,但实际不需要按顺序接

思路

每次dfs都可以接任意的单词(肯定要没被选过且能接),然后往下一层便利即可

附代码

#include<bits/stdc++.h>
using namespace std;
int n,ans;
char t[110],we[110],z[110];
void dfs(int s,int w)
{
	ans=max(ans,s);
	char j=we[w];
	for(int i=2;i<=n;i++){
		if(t[i]==j&&z[i]==0){
			z[i]=1;
			dfs(s+1,i);
			z[i]=0;
		}
	}
	return;
}
int main()
{
	freopen("JL.in","r",stdin);
	freopen("JL.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>t[i]>>we[i];
	}
	dfs(0,1);
	cout<<ans+1;
    return 0;
}

T3小W来分组

题目传送门

总结(自己)