记录一下第一个dfs
题目大概就是1~10的数字随机摆放为一个圆圈,相邻的两个数的和必须是素数。
直接下代码
带注释的
#include<bits/stdc++.h> // 素数环
using namespace std;
int a[11];
bool b[11];
bool isprime(int n)//判断素数
{
for(int k = 2; k < n; k++)
{
if(n%k==0)
return false;
}
return true;
}
void dfs(int t)//选到第几个数了
{
if(t>10)//递归退出的条件
{
if(isprime(a[1] + a[10]))//首尾也要验证一下
{
for(int k = 1; k <= 10; k++)
{
cout<<a[k]<<" ";
}
cout<<endl;
}
return;
}
for(int i = 1; i <= 10; i++)//标记法
{
if(b[i]==0 && isprime(i + a[t-1]))//没用过 且 和是素数
{
a[t] = i;//保存数据
b[i] = 1;//用于标记
dfs(t+1);//继续下一位
b[i] = 0;//回溯
}
}
}
int main()
{
//memset(b,0,sizeof b);
//没有输入
dfs(1);
return 0;
}