思路很简单,简单的素数环,相邻位必定是一奇一偶,当n为奇数时就不必在判断了,输出肯定木有素数环(剪枝的重要判定条件),
因为n为奇数时奇数的数量一定大于偶数的数量,最后一定存在两个奇数相连(雀巢原理)。
1 #include2 #include 3 #include 4 #include 5 6 int A[20],visit[20],ok,n; 7 int isp[40]={ 0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1};//把素数的情况提前放在数组里,也可以写一个奇数 8 判断函数不过去哦有点懒不想写。 9 void dfs(int cur) 10 { 11 int i; 12 if(cur==n && isp[A[0]+A[n-1]] && isp[A[n-1]+A[n-2]]) 13 { 14 for(i=0; i
木有把握好,杭电上的测试数据貌似不够精确,同样的代码在杭电上跑171ms,可到了ZOJ却是390ms