UVA - 639 Don't Get Rooked
来源:互联网 发布:程序员的数学百度网盘 编辑:程序博客网 时间:2024/06/11 16:36
题目大意:类似于八皇后。每行每列只能放一个位置,若有墙隔着就互不影响,问最多能放几个。
解题思路:回溯,先读入地图,ok() 分上下左右四个方向判断当前位置是否可以放置,ans 保存最佳答案。tmp 是当前放了多少个。遍历地图,若当前位置可放就标记一下,个数 ++,递归后还原状态。
#include<iostream> #include<cstdio>#include<cmath>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;char map[5][5];bool vis[5][5];int n, ans, tmp;bool ok(int r, int c) { int up, down, lef, rig; up = down = lef = rig = 1; for (int i = 0; i < r; i++) { if (vis[i][c]) up = 0; else if (map[i][c] == 'X') up = 1; } for (int i = r+1; i < n; i++) { if (vis[i][c]) down = 0; else if (map[i][c] == 'X') down = 1; } for (int i = 0; i < c; i++) { if (vis[r][i]) lef = 0; else if (map[r][i] == 'X') lef = 1; } for (int i = c+1; i < n; i++) { if (vis[r][i]) rig = 0; else if (map[r][i] == 'X') rig = 1; } if (up && down && lef && rig && !vis[r][c] && map[r][c] != 'X') return true; else return false;}void search(int r, int c) { if (c == n) { r++; c = 0;} if (r == n) { if (tmp > ans) ans = tmp; return; } for (int i = r; i < n; i++) for (int j = c; j < n; j++) { int t = tmp; if (ok(i, j)) { tmp++; vis[i][j] = 1; } search(i,j+1); tmp = t; vis[i][j] = 0; }}int main() { while (scanf("%d", &n) != EOF && n) { memset(vis, 0, sizeof(vis)); for (int i = 0; i < n; i++) scanf("%s", map[i]); ans = 0; tmp = 0; search(0, 0); printf("%d\n", ans); }return 0; }
0 0
- UVa 639 Don't Get Rooked
- uva 639 - Don't Get Rooked
- uva 639 - Don't Get Rooked
- uva 639 - Don't Get Rooked
- UVa 639 - Don't Get Rooked
- UVA 639 - Don't Get Rooked
- UVA 639 - Don't Get Rooked
- UVa 639 - Don't Get Rooked
- uva 639 Don't Get Rooked
- UVA 639 Don't Get Rooked
- UVA 639- Don't Get Rooked
- uva 639 Don't Get Rooked
- [回溯]Don't Get Rooked UVA 639
- uva 639 Don't Get Rooked
- uva - 639 - Don't Get Rooked
- UVa 639 - Don't Get Rooked
- uva 639 - Don't Get Rooked
- uva 639 - Don't Get Rooked
- 洛谷 P2158 [SDOI2008]仪仗队
- Memcached 集群部署
- JVM实用参数(四)内存调优
- Android Nexus私有库搭建
- shell中条件判断if中的-z到-d的意思
- UVA - 639 Don't Get Rooked
- JVM实用参数(八)GC日志
- UVA - 539 The Settlers of Catan
- C#基本程序结构
- android小说阅读器智能断章功能的实现(续)
- IPC之FIFO(有名管道)详解
- android adb破解获取root权限的锁屏密码
- DisableExplicitGC和Direct ByteBuffer
- 线性表的链式存储结构-单链表