本题使用基本的深度优先搜索,注意输出格式。
#include <iostream>
#include <cstring>
using namespace std;
bool isPrime(int n);
void dfsCircle(int pre);
int Circle[22]; //存储圆环所有数字
bool isUse[22]; //存储数字几是否被使用
int useNum = 1; //已经使用的数字的数量
int n;
int main()
{
int groupNum = 1;
while (cin >> n)
{
memset(Circle, 0, sizeof(Circle));
memset(isUse, false, sizeof(isUse));
Circle[1] = 1;
cout << "Case " << groupNum << ":" << endl;
dfsCircle(Circle[1]);
cout << endl;
++groupNum;
}
return 0;
}
bool isPrime(int n) //判断是否为素数
{
for (int i = 2; i <= n / 2; i++)
{
if (n%i == 0)
return false;
}
return true;
}
void dfsCircle(int pre) //深度优先搜索
{
if (useNum == n && isPrime(pre + 1))
{
for (int i = 1; i < n; i++)
cout << Circle[i] << " ";
cout << Circle[n] << endl;
return;
}
for (int i = 2; i <= n; i++)
{
if (isUse[i] == false && isPrime(pre + i))
{
++useNum;
Circle[useNum] = i;
isUse[i] = true;
dfsCircle(i);
--useNum;
isUse[i] = false;
}
}
}
继续加油。