题目连接
思路: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
*/