Prime Ring Problem (DFS)

原创 2016年08月30日 13:53:03
  写完这题,对DFS有了更深的认识,来浅谈一下。
 
  一般看一个题目是不是DFS,就是看这道题是不是存在着有限的可能性。

  比如说这道题,先不考虑素数,当n=6的时候 1,2,3,4,5,6     1,3,2,4,6,5 都是一种可能性,并且还有其它若干个可能性。我们首先要解决的是怎么表示出所有的可能性,并且我们要让每个数只出现一次。这个时候我们可以画一个DFS树来方便理解。根据输出,我们知道,这个圆环以1为基点。depth表示深度,第一层有2,3,4三种可能,让我们联想到循环+递归模式。为了不让数字重复,我们需要设置一个exist数组,用过的数x让exist[x]=1,然后递归,判断数是否出现过,依此类推。当递归结束时,让用过的数变成没用过的。代码如下

void dfs(int depth)

 for(int i=2;i<=n;i++)
 {
  if (!exist[i])
  {
   num[depth]=i;
   exist[i]=1;  //表示数字i用过了
   dfs(depth+1);
   exist[i]=0;  //执行到这个语句,让这个数字变成没用过的。
  }
 }
 return ;
}

  然后就是把判断素数给加进去就OK了。要注意的是首尾两个数也要判断。
 
  int prime(int x)
{
 if (x==2)
 return 1;
 for(int i=2;i<=sqrt(x);i++)
 {
  if (x%i==0)
  return 0;
 }
 return 1;
}

 
if (depth==n)
 {
  for(int i=0;i<n;i++)
  {
   if (!prime(num[i]+num[(i+1)%n]))
   return ;
  }
  for(int i=0;i<n;i++)
  {
   if (i==0)
   printf("%d",num[i]);
   else
   printf(" %d",num[i]);
  }
  printf("\n");
  return ;
 }

  做搜索的key,画好搜索树,先完成部分代码,比如先列完可能性,测试,在按照题目要求加一些代码。

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
  • 3599

[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

杭电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

hdoj--1016--Prime Ring Problem(递归回溯)

Prime Ring Problem                                                                             Time...
  • qq_29963431
  • qq_29963431
  • 2015年12月28日 21:03
  • 200

杭电ACM OJ 1016 Prime Ring Problem 回溯法+ 高效判断素数 快速轻松解决

简单易理解的回溯法,高效判断素数,可以看我另外两篇博客,这里我也快速简要讲一下。 这一题主要是要领悟回溯法,很关键。 先写一个正常的n个数的求各种排列情况。就1到。。n。的各种排列情况。 ...
  • qq_36523667
  • qq_36523667
  • 2017年11月16日 00:13
  • 78

Prime Ring Problem(深搜入门)

题目大体意思:就是给定一个n,有1........n这n个数,组成一个环,保证相邻两个数的和是素数 求所有满足条件的序列...
  • gg_gogoing
  • gg_gogoing
  • 2014年07月18日 09:26
  • 434

HDOj1016 Prime Ring Problem

题意:给一个1~20之间的数n,找到一条俩俩数字相邻  相加结果是素数的圈,如n=6时:这6个数可找到一条1+4=5,4+3=7,3+2=5,2+5=7,5+6=11,6+1=7的圈 本题不难,要了解...
  • jrdgogo
  • jrdgogo
  • 2016年03月09日 13:41
  • 242

Prime Ring Problem(素数环 深搜)

Prime Ring Problem  A ring is compose of n circles as shown in diagram. Put natural number 1, ...
  • mjj1024
  • mjj1024
  • 2017年05月27日 20:27
  • 358
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Prime Ring Problem (DFS)
举报原因:
原因补充:

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