嗯...

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016

一道很典型的dfs+回溯:

根据题意首先进行初始化,即第一个位置为1,然后进行dfs,枚举2~n之间的每一个数,如果这个数没被使用并且它和环中上一个数形成素数环,那么就把它加入环中,打上标记,然后继续dfs,最后回溯。当环上的个数正好等于n并且第一个数和最后一个数也能组成素数,则输出,输出时注意格式,很严格!

dfs这里还有一个剪枝:

只有n为偶数时才可能形成素数环!因为当n为奇数时,在1~n中奇数的个数比偶数多一,所以一定会形成两个奇数相邻,则构不成素数....

AC代码:

 #include<cstdio>
#include<cstring>
#include<iostream> using namespace std; int n, ring[], vis[]; inline bool is_prime(int x){
for(int i = ; i * i <= x; i++){
if(x % i == ) return ;
}
return ;
} inline void dfs(int x){
if(x == n && is_prime(ring[x] + ring[])){
for(int i = ; i < n; i++)
printf("%d ", ring[i]);//输出格式要严格
printf("%d\n", ring[n]);
return;
}
for(int i = ; i <= n; i++){
if(!vis[i] && is_prime(ring[x] + i)){
vis[i] = ;
ring[x + ] = i;
dfs(x + );
vis[i] = ;
}
}
} int main(){
int k = ;
while(~scanf("%d", &n)){
memset(ring, , sizeof(ring));
memset(vis, , sizeof(vis));
ring[] = ;
printf("Case %d:\n", k);
k++;
if(n % == && n > ) dfs();
printf("\n");
}
return ;
}

AC代码

最新文章

  1. codevs 1164 统计数字
  2. Mac系统下Android生成keystore
  3. How to overcome “datetime.datetime not JSON serializable” in python?
  4. Windows XP SP3 Professional 微软(MSDN)官方原版系统
  5. 在Salesforce中处理Xml的生成与解析
  6. SAP B1 ADDON 开发
  7. KeepAlive详解
  8. Sharepoint 问题集锦 - 外部列表(external list) - 读取当前用户上下文或用户名作为筛选参数
  9. String Stringbuilder Stringbuffer的区别
  10. Random类 一般跟生成随机数有关
  11. tar.gz和tar.bz2
  12. NPOI导出excel(2.0.6版本)
  13. bash编程-正则表达式
  14. Shell - 简明Shell入门15 - 调试(Debug)
  15. java④
  16. 【阅读笔记】《C程序员 从校园到职场》第五章 内存操作
  17. 学以致用十三-----Centos7.2+python3+YouCompleteMe成功历程
  18. Android 蓝牙通信——AndroidBluetoothManager
  19. iOS UISlider滑动块触摸范围调整变大
  20. 数据库索引&amp;数据页

热门文章

  1. js 简单粗暴深拷贝
  2. 174. 地下城游戏(逆向DP)
  3. SQL语句分类和语法
  4. thows,thow和try catch的区别
  5. vs2015制作一个超级简单的MVC项目
  6. C++-POJ1015-Jury Compromise
  7. 题解【SP2713】GSS4 - Can you answer these queries IV
  8. 无聊学习一下MVP这个概念
  9. Go_sqlx和占位符
  10. java中一个类中的 this. 是什么作用