zoj 1008 dfs 一种巧妙的剪枝
2014-10-20 10:23
288 查看
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=8
我做此题错了好几次,纠结了还几天,今天总算弄懂了自己的逻辑错误,又学到了一些新的知识
一下时我的代码
我做此题错了好几次,纠结了还几天,今天总算弄懂了自己的逻辑错误,又学到了一些新的知识
一下时我的代码
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> using namespace std; int t; const int sizen=36; struct ele { int up; int right; int down; int left; }p[sizen]; int result[sizen]; int cnt[sizen]; int DFS(int x,int n) { int i; if(x==n*n) return 1; for(i=0;i<t;i++) { if(!cnt[i]) continue; if(x%n!=0) if(p[i].left!=p[result[x-1]].right) continue; if(x/n!=0) if(p[i].up!=p[result[x-n]].down) continue; cnt[i]--; result[x]=i; if(DFS(x+1,n)) return 1; cnt[i]++; } return 0; } int main() { int n; int q=0; int i,j; int x1,x2,x3,x4; bool s=false; while(scanf("%d",&n),n) { t=0; memset(cnt,0,sizeof(cnt)); for(i=0;i<n*n;i++) { scanf("%d%d%d%d",&x1,&x2,&x3,&x4); for(j=0;j<t;j++) if(p[j].up==x1&&p[j].right==x2&&p[j].down==x3&&p[j].left==x4) { cnt[j]++; break; } if(j==t) { p[t].up=x1; p[t].right=x2; p[t].down=x3; p[t].left=x4; cnt[t]++; t++; } } if(!s) s=true; else printf("\n"); printf("Game %d: ",++q); if(DFS(0,n)) printf("Possible\n"); else printf("Impossible\n"); } return 0; }
相关文章推荐
- ZOJ--1008:Gnome Tetravex(剪枝dfs)
- zoj 1008 Gnome Tetravex (DFS + 剪枝)
- zoj 1008 DFS
- (DFS)zoj1008-Gnome Tetravex
- POJ 生日蛋糕(DFS 巧妙剪枝)
- zoj 2734 Exchange Cards【dfs+剪枝】
- POJ 生日蛋糕(DFS 巧妙剪枝)
- ZOJ - 1492 dfs剪枝求最大团
- POJ 生日蛋糕(DFS 巧妙剪枝)
- hdu1518 Square | ZOJ1909 | POJ2362 (dfs + 剪枝)
- POJ 生日蛋糕(DFS 巧妙剪枝)
- 每日三题-Day6-C(CSU 1508 地图的四着色 巧妙剪枝搜索dfs)
- POJ 生日蛋糕(DFS 巧妙剪枝)
- ZOJ2100题解这是我整整意义上的第一道DFS题能做出来我很开心,和上题一样,方法思路大体相同,不过不需要剪枝。
- zoj 1008 暴力枚举求解dfs+优化
- 【DFS+剪枝】-ZOJ-3631-Watashi's BG
- ZOJ 1008 Gnome Tetravex(DFS)
- POJ 生日蛋糕(DFS 巧妙剪枝)
- zoj 1008 暴力枚举求解dfs+优化
- POJ 生日蛋糕(DFS 巧妙剪枝)