1,八皇后问题
# include<iostream>
using namespace std;
int a[10];
int cnt=0;
bool judge(int cur,int num)
{
for(int i=1; i<cur; i++)
if(num==a[i]||(i+a[i])==(cur+num)||(i-a[i])==(cur-num))
return false;
return true;
}
void backtrack(int cur)
{
if(cur==9)
{
cnt++;
for(int i=1; i<=8; i++)
cout<<a[i]<<" ";
cout<<endl;
return ;
}
for(int i=1; i<=8; i++)
{
if(judge(cur,i))
{
a[cur]=i;
backtrack(cur+1);
}
}
}
int main()
{
backtrack(1);
cout<<cnt<<endl;
return 0;
}
2,素数环问题
输入一个整数n,n<=16,要求输出由1-n组成的环,环中任意相邻两个数的和为素数:
# include<iostream>
# include<cstring>
using namespace std;
int a[20],vis[20];
void dfs(int cur,int n)
{
if(cur==n+1)
{
for(int i=1; i<=n; i++)
cout<<a[i]<<" ";
cout<<endl;
return;
}
for(int i=1; i<=n; i++)
{
int s;
if(cur==n)s=a[1]+i;
else s=a[cur-1]+i;
if(!vis[i]&&(cur==1||s==3||s==5||s==7||s==11||s==13))
{
a[cur]=i;
vis[i]=1;
dfs(cur+1,n);
vis[i]=0;
}
}
}
int main()
{
memset(vis,0,sizeof(vis));
int n;
cin>>n;
dfs(1,n);
return 0;
}