http://acm.hdu.edu.cn/showproblem.php?pid=1016
题意:
已知一个数n,在1-n(包含 n ,0 < n < 20)里组合形成一个环形,使得每两个相邻的数都是素数,每次都以1为开始,输出所有情况。
样例:
6
8
Case 1:
1 4 3 2 5 6
1 6 5 2 3 4
Case 2:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2
dfs深度优先搜索入门题目,暴力搜索即可以过了
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
using namespace std;
int visited[];
int load[];
int n;
bool isprim(int n)
{
if (n == )
return true;
for (int i = ; i<=sqrt(n); i++)
{
if (n%i == )
return false;
}
return true;
}
void dfs(int k,int v)
{
visited[v] = ;
if (k == n)
{
if (isprim(v+))
{
load[k] = v;
for (int j = ; j < n; j++)
{
printf("%d%c",load[j],j==n-?'\n':' ');
}
return ;
}
}
for (int i = ; i <= n; i++)
{
if (!visited[i] && isprim(v+i))
{
visited[i] = ;
load[k] = i;
dfs(k+,i);
visited[i] = ; // turn back
//load[cnt] = 0;
}
}
return;
}
int main()
{
int cas = ;
while (cin >> n)
{
memset(visited,,sizeof(visited));
memset(load,,sizeof(load));
load[] = ;
printf("Case %d:\n",cas++);
dfs(,);
cout << endl;
}
return ;
}