ZOJ 1008 Gnome Tetravex
2015-04-06 14:51
260 查看
#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <algorithm> #define LL long long using namespace std; const int MAXN = 100 + 10; int table[30]; int squre[30][5]; int C[30]; int m; int n; bool dfs(int pos) { if(pos == n * n) return true; for(int i=0;i<m;i++) { if(C[i] == 0) continue; if(pos % n != 0) { if(squre[i][3] != squre[table[pos-1]][1]) continue; } if(pos >= n) { if(squre[i][0] != squre[table[pos - n]][2]) continue; } C[i]--; table[pos] = i; if(dfs(pos + 1)) return true; C[i]++; } return false; } void init() { memset(C, 0, sizeof(C)); } int main() { int top, left, bottom, right; int kcase = 0; while(scanf("%d", &n)!= EOF && n) { init(); m = 0; kcase++; for(int i=0;i<n*n;i++) { scanf("%d%d%d%d", &top, &right, &bottom, &left); int j; for(j=0;j<m;j++) { if(squre[j][0] == top && squre[j][1] == right && squre[j][2] == bottom && squre[j][3] == left) { C[j]++; break; } } if(j == m) { squre[j][0] = top; squre[j][1] = right; squre[j][2] = bottom; squre[j][3] = left; C[j] = 1; m++; } } if(kcase > 1) printf("\n"); if(dfs(0)) printf("Game %d: Possible\n", kcase); else printf("Game %d: Impossible\n", kcase); } return 0; }
相关文章推荐
- ZOJ Problem Set - 1008 Gnome Tetravex
- ZOJ Problem Set - 1008 Gnome Tetravex
- ZOJ 1008 Gnome Tetravex (使用状态进行DFS)
- ZOJ 1008 Gnome Tetravex(DFS)
- ZOJ 1008 Gnome Tetravex(DFS)
- ZOJ - 1008 Gnome Tetravex
- ZOJ Problem Set - 1008
- ZOJ--1008:Gnome Tetravex(剪枝dfs)
- zoj 1008 DFS+剪枝(小坑爹的剪枝)
- ZOJ - 1008 Gnome Tetravex
- zoj 1008 暴力枚举求解dfs+优化
- zoj 1008 Gnome Tetravex (DFS + 剪枝)
- zoj 1008 Gnome Tetravex
- zoj 1008 暴力枚举求解dfs+优化
- zoj 1008
- ZOJ 1008 Gnome Tetravex
- ACM-ZOJ 1008 DFS 一道好题
- zoj1008-gnome tetravex
- ZOJ-1008 Gnome Tetravex
- zoj 1008