OJ题目 : click here ~~
大概题意:n个数,形成一个环,使得相邻两个数的和为素数。以1开始,按字典序输出序列。
很简单的深搜。
AC_CODE
int n;
int visit[22];
int num[22];
int len;
bool Is_prime(int x)
{
for(int i = 2;i*i <= x;i++)
if(x%i == 0) return false;
return true;
}
void print()
{
int i;
for(i = 0;i < n - 1;i++)
printf("%d ",num[i]);
printf("%d\n",num[i]);
}
void dfs()
{
if(len == n && Is_prime(num[0] + num[n - 1])) {print();return;}
for(int i = 2;i <= n;i++)
{
if(visit[i] == 0 && Is_prime(num[len - 1] + i))
{
visit[i] = 1;
num[len] = i;
len++;
dfs();
visit[i] = 0;
len--;
}
}
return ;
}
int main()
{
int t = 0;
while(scanf("%d",&n) != EOF)
{
t++;
memset(visit , 0 , sizeof(visit));
printf("Case %d:\n",t);
num[0] = 1;
len = 1;
dfs();
cout << endl;
}
return 0;
}