现在的位置: 首页 > 综合 > 正文

Prime Ring Problem

2012年12月03日 ⁄ 综合 ⁄ 共 626字 ⁄ 字号 评论关闭
#include<stdio.h>
#include<string.h>
#include<math.h>
int dp[100],visit[100];
int n;
int prime(int x)
{
 int i;
 for(i=2;i<=sqrt(x);i++)
  if(x%i==0)
  return 0;
  return 1;
}
void DFS(int x)
{
    int i,j;
    if( (x==n)&&prime(dp[x]+dp[1])&&prime(dp[x]+dp[x-1]) )
    {
      for(i=1;i<=n;i++)
      printf(i==1?"%d":" %d",dp[i]);
      puts("");
    }
    else 
      {
        for(i=2;i<=n;i++)
         if(prime(dp[x]+i)&&!visit[i])
         {
             visit[i]=1;
             dp[x+1]=i;
             DFS(x+1);
             visit[i]=0;
         }
       }
}
int main( )
{   
    int l=1;
    while(scanf("%d",&n)!=EOF)
    {
     
     if(n==1)
     { 
      printf("Case %d:\n\n",l++);
      continue;
     }
     else
     printf("Case %d:\n",l++);
     memset(visit,0,sizeof(visit));
     memset(dp,0,sizeof(dp));
     dp[1]=1;
     DFS(1);
     puts("");
     }
     return 0;
}
  

这题的主要思路是如何判断在dfs结束。。。就是把值保存在数组里面。数组标号从1开始,至n结束。

抱歉!评论已关闭.