HDU–1016题 Prime Ring Problem

原创 2012年03月21日 20:10:50

素数环问题,用到了深搜,很有技巧。先是在学校OJ上看到的,后来又去杭电提交了一下。HDU水过,NYOJ超时一次,WA了一次。相对而言,NYOJ上难度大点,要考虑奇偶数。具体思路写在代码中了。

我的新的个人网站地址:www.imanor.net。欢迎各位光临。

原题地址:

HDU:点击打开链接

NYOJ:点击打开链接

HDU代码

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int a[20],vis[20],isprime[45]={0},n;
void get_prime()
{
  int i,j;
  for(i=2;i<8;i++)
    if(!isprime[i])
     for(j=i*i;j<45;j+=i)
       isprime[j]=1;
}//把40以内的素数打出来.0代表是素数
int dfs(int step)
{
    int i;
    if(step==n+1&&!isprime[a[n]+a[1]])//深搜到结束条件
    {
      for(i=1;i<n;i++)
      printf("%d ",a[i]);
      printf("%d\n",a[n]);
      return 0;
    }
    for(i=2;i<=n;i++)
    {
      if(!vis[i]&&!isprime[i+a[step-1]])//如果这个数没用过,并且这个数和上一个放到环里的数之和是素数
      {
        a[step]=i;
        vis[i]=1;
        dfs(step+1);
        vis[i]=0;//回溯
      }
    }
}
int main()
{
    int k=1;
    a[1]=1;
    get_prime();
    while(scanf("%d",&n)!=EOF)
    {
      memset(vis,0,sizeof(vis));
      printf("Case %d:\n",k++);
      dfs(2);
      printf("\n");
    }
}
NYOJ 代码

 
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int a[20],vis[20],isprime[45]={0},n;
void get_prime()
{
  int i,j;
  for(i=2;i<8;i++)
    if(!isprime[i])
     for(j=i*i;j<45;j+=i)
       isprime[j]=1;
}//把40以内的素数打出来.0代表是素数
int dfs(int step)
{
    int i;
    if(step==n+1&&!isprime[a[n]+a[1]])//深搜到结束条件
    {
      for(i=1;i<n;i++)
      printf("%d ",a[i]);
      printf("%d\n",a[n]);
      return 0;
    }
    for(i=2;i<=n;i++)
    {
      if(!vis[i]&&!isprime[i+a[step-1]])//如果这个数没用过,并且这个数和上一个放到环里的数之和是素数
      {
        a[step]=i;
        vis[i]=1;
        dfs(step+1);
        vis[i]=0;//回溯
      }
    }
}
int main()
{
    int k=1;
    a[1]=1;
    get_prime();
    while(1)
    { scanf("%d",&n);
	  if(!n)break;
      memset(vis,0,sizeof(vis));
      printf("Case %d:\n",k++);
	  if(n%2==1&&n!=1){printf("No Answer\n");continue;}
      else 
	  {
		  dfs(2);
	  printf("\n");
	  }
    }
}        



杭电OJ——1016 Prime Ring Problem

Prime Ring Problem Problem Description A ring is compose of n circles as shown in diagra...
  • lishuhuakai
  • lishuhuakai
  • 2012年09月24日 22:56
  • 4677

hdu 1016 Prime Ring Problem DFS解法 纪念我在杭电的第一百题

A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle...
  • Lionel_D
  • Lionel_D
  • 2015年02月12日 18:00
  • 763

HDU Prime Ring Problem

打开题目链接 Prime Ring Problem                                                              Time ...
  • zxdfc
  • zxdfc
  • 2014年03月30日 17:17
  • 338

题目1016: Prime Ring Problem

Problem Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, .....
  • SJF0115
  • SJF0115
  • 2013年03月14日 09:29
  • 3598

HDU 1016 Prime Ring Problem

Problem Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ...
  • u012313382
  • u012313382
  • 2014年07月06日 10:17
  • 464

HDU 1016 (Prime Ring Problem)

Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe...
  • Rem_little_fan_boy
  • Rem_little_fan_boy
  • 2017年08月15日 20:03
  • 88

Prime Ring Problem hdu 1016

Prime Ring Problem Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)...
  • shan614667793
  • shan614667793
  • 2013年07月19日 08:57
  • 586

Hdu 1016 Prime Ring Problem

import java.io.*; import java.math.BigInteger; import java.util.*; public class stackingbox { ...
  • dyhu083
  • dyhu083
  • 2014年01月24日 20:59
  • 243

hdu 1016 Prime Ring Problem

Problem Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, .....
  • u010650359
  • u010650359
  • 2013年11月15日 15:00
  • 681

[ACM] 1016 Prime Ring Problem (深度优先搜索)

Prime Ring Problem Problem Description A ring is compose of n circles as shown in diagram....
  • sr19930829
  • sr19930829
  • 2014年05月12日 20:39
  • 1804
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU–1016题 Prime Ring Problem
举报原因:
原因补充:

(最多只允许输入30个字)