[蓝桥杯2018决赛]激光样式

题目连接
思路:dfs即可,对于每个cur都有选和不选两种状态。而选的状态必须符合相邻的没有开过。最后回溯一下即可

#include<iostream>

using namespace std;
int vis[35],n,res;
bool fun(int x)
{
	if(vis[x-1]==0&&vis[x+1]==0)
	return true;
	else return false;
}
void dfs(int cur)
{
	if(cur==n+1){
		res++;
		return ;
	}
	vis[cur]=0;
	dfs(cur+1);
	if(fun(cur)){
		vis[cur]=1;
		dfs(cur+1);
		vis[cur]=0;
	}
}
int main()
{
//	cin>>n;
	n=30;
	dfs(1);
	cout<<res<<'\n';
	return 0;
}
/*
2178309
*/

猜你喜欢

转载自blog.csdn.net/qq_43566782/article/details/108774167