ZOJ 1008 Gnome Tetravex
2015-03-10 22:54
274 查看
ZOJ 1008 Gnome Tetravex
1 算法
将平面按从左到右,从上到下,分别标为0、1、2、... n*n;然后按顺序放入合适的方块;无法继续放方块时回溯。写代码时对方块进行判重,对每种方块统计数目并放入node数组中,用nodenum记录不同方块的数目。
2 代码
2.1 WA的代码
#include <cstdio> #include <cstring> struct NodeData { int tri[4]; bool operator==(const struct NodeData &a) { return (a.tri[0] == tri[0] && a.tri[1] == tri[1] && a.tri[2] == tri[2] && a.tri[3] == tri[3]); } }; struct NodeData node[100]; int matrix[100][100]; int sum[100]; int n; int nodenum; void read_data() { bool exist; memset(sum, 0, sizeof(sum)); nodenum = 0; for (int i = 0; i < n * n; ++i) { for (int j = 0; j < 4; ++j) scanf("%d", &(node[nodenum].tri[j])); exist = false; for (int j = 0; j < nodenum; ++j) if (node[i] == node[j]) { sum[j]++; exist = true; break; } if (!exist) { sum[nodenum] = 1; nodenum++; } } } bool dfs(int ord) { int x, y; if (ord == n * n) return true; x = ord / n; y = ord % n; for (int i = 0; i < nodenum; ++i) if (sum[i] > 0) { if (x > 0 && node[matrix[x - 1][y]].tri[2] != node[i].tri[0]) continue; if (y > 0 && node[matrix[x][y - 1]].tri[1] != node[i].tri[3]) continue; matrix[x][y] = i; sum[i]--; if (dfs(ord + 1)) return true; sum[i]++; } return false; } int main() { int count = 1; scanf("%d", &n); while (n != 0) { read_data(); if (dfs(0)) printf("Game %d: Possible\n", count); else printf("Game %d: Impossible\n", count); count++; scanf("%d", &n); if (n != 0) printf("\n"); } return 0; }
2.2 修改
31行if (node[i] == node[j])
改为
if (node[nodenum] == node[j])
相关文章推荐
- zoj 1008 Gnome Tetravex (DFS + 剪枝)
- zoj1008-gnome tetravex
- ZOJ 1008(DFS+剪枝) Gnome Tetravex
- ZOJ 1008 Gnome Tetravex
- (DFS)zoj1008-Gnome Tetravex
- ZOJ-1008 Gnome Tetravex
- ZOJ - 1008 Gnome Tetravex
- ZOJ 1008 Gnome Tetravex
- zoj 1008 Gnome Tetravex
- 浙大ZOJ 1008 Gnome Tetravex问题解决
- ZOJ 1008 Gnome Tetravex
- ZOJ 1008 Gnome Tetravex(DFS)
- ZOJ--1008:Gnome Tetravex(剪枝dfs)
- zoj 1008 Gnome Tetravex
- ZOJ Problem Set - 1008 Gnome Tetravex (TLE)
- zoj 1008 Gnome Tetravex
- zoj 1008 Gnome Tetravex
- ZOJ -1008 -Gnome Tetravex
- ZOJ 1008 Gnome Tetravex
- zoj 1008 Gnome Tetravex