zoj 1008
2014-07-26 22:01
169 查看
就是把相同的块放一起,就可以缩短搜索次数了!
so,对于这种搜索,每次都将可能存在相同的块储存。
#include <map> #include <set> #include <queue> #include <stack> #include <math.h> #include <vector> #include <cstdio> #include <string> #include<string.h> #include <iostream> #include <algorithm> using namespace std; typedef long long ll; int m[30][5],n,cnt; int id[6][6]; int num[30]; bool ok; void dfs(int x,int y) { if(ok) return ; if(x>n) { ok=1; return; } for(int i=1;i<cnt;i++) { if(num[i]==0) continue; if(x>1&&m[id[x-1][y]][3]!=m[i][1]) continue; if(y>1&&m[id[x][y-1]][2]!=m[i][4]) continue; id[x][y]=i; num[i]--; if(y!=n) dfs(x,y+1); else dfs(x+1,1); if(ok) return ; num[i]++; } } int main() { int cas=0; while(cin>>n&&n) { cnt=1; memset(num,0,sizeof(num)); for(int i=0;i<n*n;i++) { int a,b,c,d,j; cin>>a>>b>>c>>d; for(j=1;j<cnt;j++) if(m[j][1]==a&&m[j][2]==b&&m[j][3]==c&&m[j][4]==d) break; if(j==cnt) { m[j][1]=a; m[j][2]=b; m[j][3]=c; m[j][4]=d; cnt++; } num[j]++; } ok=0; dfs(1,1); if(cas) cout<<endl; cout<<"Game "<<cas+1<<": ";cas++; if(!ok) cout<<"Impossible\n"; else cout<<"Possible\n"; } return 0; }
相关文章推荐
- zoj 1008 Gnome Tetravex
- [ZOJ 1008]Gnome Tetravex (dfs搜索 + 小优化)
- ZOJ -1008 -Gnome Tetravex
- [搜索] ZOJ1002、ZOJ1008、ZOJ1019、POJ1011
- (DFS)zoj1008-Gnome Tetravex
- ZOJ 1008 Gnome Tetravex
- zoj 1008 Gnome Tetravex
- ZOJ_1008_GnomeTetravex
- ZOJ Problem Set - 1008
- 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 (使用状态进行DFS)
- ZOJ 1008 Gnome Tetravex
- ZOJ 1008 Gnome Tetravex
- zoj 1008 DFS
- ZOJ-1008-Gnome Tetravex
- ZOJ 1008(DFS+剪枝) Gnome Tetravex