素数环 dfs

原创 2012年03月24日 17:33:48
#include<iostream>
#include<cmath>
using namespace std;
//the prime ring
int visited[21];
int res[21];
int n;
int flag;
int isPrime(int p)
{
    if(p==1) return 0;
    else if(p==2||p==3) return 1;
    for(int i=2;i<=sqrt(p);i++)
     if(p%i==0)
      return 0;
    return 1;
}
void dfs(int k)
{
  if(k>n)
  {
    flag=1;
    for(int i=1;i<=k-1;i++)
     {
      if(i==1)
       cout<<res[i];
      else
       cout<<" "<<res[i];
     }
    cout<<endl;
  }
  for(int i=2;i<=n;i++)
  {
    if(!visited[i])
    {
      if(k==n)
       {
         if(isPrime(i+1)&&isPrime(res[k-1]+i))
          {
            visited[i]=1;
            res[k]=i;
            dfs(k+1);
            visited[i]=0;
          }
          // visited[i]=0;
       }
      else
      {
        if(isPrime(res[k-1]+i))
        {
          visited[i]=1;
          res[k]=i;
          dfs(k+1);
          visited[i]=0;
        }
        // visited[i]=0;
      }
    }
  }
}
int main()
{
    //int n;
    while(cin>>n)
    {
      flag=0;
      memset(visited,0,sizeof(visited));
      memset(res,0,sizeof(res));
      res[1]=1;
      dfs(2);
      if(!flag) cout<<"No answer"<<endl;
    }
    system("pause");
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

nyoj ACM:素数环(DFS 回溯 递归)

素数环 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。为了...
  • MosBest
  • MosBest
  • 2017年04月04日 17:18
  • 746

素数环问题的非递归实现

     关于素数环问题,我在早先的一个帖子里已经做了详细的说明。那时候我用的是递归的方式来实现的。今天我又使用非递归的方式把这个问题做了一遍,有兴趣的网友可以一起探讨!package andycpp...
  • andycpp
  • andycpp
  • 2007年06月29日 23:34
  • 2095

素数环(dfs递归实现)

题意:给定一个数,输出该数能够形成的素数环的所有方案。链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016思路:dfs递归实现,三个数组,一个存环的每个位...
  • qq_35399846
  • qq_35399846
  • 2016年07月22日 15:07
  • 713

【经典算法问题】素数环问题

/* 素数环问题 2014-4-8 17:22:28 */ #include #include #include bool hasSelected[21]; int site[21]; ...
  • u012846486
  • u012846486
  • 2014年04月08日 18:24
  • 1276

素数环(dfs)

l 原题: Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 6553...
  • Enjoying_Science
  • Enjoying_Science
  • 2014年09月15日 20:11
  • 413

机试算法讲解: 第44题 深度优先搜索之素数环问题

/* 问题:在给定的1到n的数字中,将数字填入环中,使得环中任意2个相邻的数字和为素数。按字典序输出所有符合条件的解 回溯法:枚举每一个值,第一个放1时,尝试放入第二个数字,使其和1的和为素数,放入后...
  • qingyuanluofeng
  • qingyuanluofeng
  • 2015年08月01日 14:42
  • 590

素数环 -- C++实现

问题描述:将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加, 结果均为素数,那么这个环就成为素数环。 n=20时,下面的序列就是一个素数环: 1 2 3 4 7...
  • u012965373
  • u012965373
  • 2015年04月21日 21:12
  • 1938

C语言 素数环

1008.素数环问题 时限:1000ms 内存限制:10000K  总时限:3000ms 描述 把1到20这重新排列,使得排列后的序列A满足: a. 任意相邻两个数之和是素数 b. 不存...
  • Hongsf985
  • Hongsf985
  • 2017年11月09日 19:59
  • 228

回溯法-素数环问题

1:问题描述一个环由一圈整数组成,要求是相邻的两个整数之和为素数;2:问题思考对于回溯法来说,我们深度优先,也就是说的想法就是先找到一个能够全部填完的环; 1:如果填入一个数是成立的,我们就继续填写...
  • qq_23974175
  • qq_23974175
  • 2016年12月28日 18:39
  • 614

Java队列递归求解素数环问题

思路: 1.创建顺序表SqList的对象L,用于存放素数环中的数据元素; 创建链队列LinkQueue对象Q,用于存放还未加入到素数环中的元素。 2.初始化顺序表L和队列Q:将1加入到顺序表L中,...
  • dly215011
  • dly215011
  • 2016年10月31日 19:16
  • 725
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:素数环 dfs
举报原因:
原因补充:

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