#include <stdio.h>
int circle[20], already[20], sign;
int IsPrime (int n);
int check (int n);
void Output ();
void dfs (int n);
int main ()
{
dfs(0);
return 0;
}
int IsPrime (int n)
{
int i;
for (i = 2; i < n; i++)
if (n % i == 0) return 0;
return 1;
}
int check(int n)
{
if (n == 19)
{
if (IsPrime(circle[n] + circle[0]) && IsPrime(circle[n] + circle[n - 1])) return 1;
}
else
{
if (IsPrime(circle[n] + circle[n - 1])) return 1;
}
return 0;
}
void Output()
{
int i;
for (i = 0; i < 19; i++) printf ("%d ", circle[i]);
printf ("%d\n", circle[i]);
return ;
}
void dfs(int n)
{
int i;
if (sign == 1) return ;
for (i = 0; i < 20; i++)
if (already[i] == 0) break;
if (i == 20) Output(), sign = 1;
else
{
for (i = 0; i < 20; i++)
{
if (already[i] == 0)
{
circle[n] = i + 1;
if (check(n))
{
already[i] = 1;
dfs(n + 1);
already[i] = 0;
circle[n] = 0;
}
}
}
}
}
[NOJ][算法实验二]1008.素数环问题
最新推荐文章于 2022-12-17 10:35:23 发布