hdu 2514
来源:互联网 发布:sqlserver增量备份 编辑:程序博客网 时间:2024/06/05 08:59
一个简单的dfs,在没有重复的填完数字后再用ok检验。之前我用错,造成很多无解。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 10;int num[maxn];int vis[maxn], cnt, ans[maxn];int ok(){ if(abs(num[0] - num[1]) != 1 && abs(num[0] - num[2]) != 1 && abs(num[0] - num[3]) != 1&& abs(num[1] - num[2]) != 1 && abs(num[1] - num[4]) != 1 && abs(num[1] - num[5]) != 1 && abs(num[2] - num[3]) != 1 && abs(num[2] - num[4]) != 1 && abs(num[2] - num[5]) != 1 && abs(num[2] - num[6]) != 1 && abs(num[3] - num[5]) != 1 && abs(num[3] - num[6]) != 1 && abs(num[4] - num[5]) != 1 && abs(num[4] - num[7]) != 1 && abs(num[5] - num[6]) != 1 && abs(num[5] - num[7]) != 1 && abs(num[6] - num[7]) != 1) return true; else return false;}void cop(){ for(int i = 0; i < 8; i++) ans[i] = num[i];}int dfs(int deep){ if(deep == 8 && ok()) {cnt++; cop();return true;} if(cnt >= 2) return false; if(!num[deep]) { for(int i = 1; i <= 8; i++) { if(!vis[i]) { num[deep] = i; vis[i] = 1; if(dfs(deep + 1) == false) return false; num[deep] = 0; vis[i] = 0; } } } else if(dfs(deep + 1) == false) return false;}int main(){ int n; scanf("%d", &n); for(int kase = 1; kase <= n; kase++) { cnt = 0; memset(vis, 0, sizeof(vis)); for(int i = 0; i < 8; i++) { scanf("%d", &num[i]); vis[num[i]] = 1; } dfs(0); printf("Case %d: ", kase); if(cnt == 0) printf("No answer\n"); else if(cnt == 1) { for(int i = 0; i < 7; i++) printf("%d ", ans[i]); printf("%d\n", ans[7]); } else printf("Not unique\n"); } return 0;}
阅读全文
0 0
- hdu 2514
- HDU 2514 DFS
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- 第 8 章 查找
- poj2528(线段树区间染色)
- 学习 视频压缩:I帧、P帧、B帧
- iOS 开发技巧之 ---- 使用Mac上的Safari对UIWebView进行调试
- HTML5新增属性介绍和地理位置
- hdu 2514
- web项目 调用外部接口 例子
- ELK+Kafka 企业日志收集平台(一)
- 学做人学做事
- HDU
- 积木题 (2017年秋季——某网站的面试笔试题)
- 正则表达式 匹配中文,英文字母和数字及_的写法!同时控制长度
- Spark Shuffle原理、Shuffle操作问题解决和参数调优
- centos64位c语言编译时/usr/bin/ld: cannot find -lmysqlclient