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 1016Prime Ring Problem dfs经典题 素数环

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav...

杭电 Prime Ring Problem 1016 DFS

http://acm.hdu.edu.cn/showproblem.php?pid=1016 趁老板没有召见之前,再水几个题 直接深搜: #include #include #include #...

杭电OJ(HDOJ)1016题:Prime Ring Problem(DFS问题)

Problem Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ...

HDOJ 1016 Prime Ring Problem(DFS)

Prime Ring Problem Problem Description A ring is compose of n circles as shown in diagram. Put ...

HDU 1016 Prime Ring Problem (DFS)

Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...

hdu1016-Prime Ring Problem(简单dfs)

Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...

HDOJ 1016 Prime Ring Problem(dfs+回溯)

Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...

HDU 1016 Prime Ring Problem(DFS回溯+素数判断)

HDU 1016 Prime Ring Problem(DFS回溯+素数判断) http://acm.hdu.edu.cn/showproblem.php?pid=1016 题意:给你一个n,要求输出...

HDU-1016-Prime Ring Problem DFS

Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...

hdu-1016 Prime Ring Problem(素数环) DFS解法

Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Prime Ring Problem (DFS)
举报原因:
原因补充:

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