【BFS】bzoj1054 [HAOI2008]移动玩具
2014-09-07 14:49
344 查看
暴搜吧,可以哈希一下,但是懒得写哈希了,所以慢得要死。
Code:
Code:
#include<cstdio> #include<queue> #include<set> #include<algorithm> using namespace std; const int di[]={0,0,-1,1},dj[]={-1,1,0,0}; struct Squ{char S[4][4];}; struct Node{Squ v;int d;Node(const Squ &a,const int &b){v=a;d=b;}Node(){}}; bool operator < (const Squ &a,const Squ &b) { for(int i=0;i<4;i++) for(int j=0;j<4;j++) if(a.S[i][j]<b.S[i][j]) return true; else if(a.S[i][j]>b.S[i][j]) return false; return false; } bool operator == (const Squ &a,const Squ &b) { for(int i=0;i<4;i++) for(int j=0;j<4;j++) if(a.S[i][j]!=b.S[i][j]) return false; return true; } Squ from,to; set<Squ>Set; queue<Node>q; inline bool check(const int &x,const int &y) { if(x>=0&&x<4&&y>=0&&y<4&&q.front().v.S[x][y]=='0') return true; return false; } inline void work(const Squ &tmp) { if(Set.find(tmp)==Set.end()) { if(tmp==to) { printf("%d\n",q.front().d+1); exit(0); } Set.insert(tmp); q.push(Node(tmp,q.front().d+1)); } } int main() { for(int i=0;i<4;i++)scanf("%s",from.S[i]); for(int i=0;i<4;i++)scanf("%s",to.S[i]); if(from==to){printf("0\n");return 0;} q.push(Node(from,0)); Set.insert(from); while(!q.empty()) { for(int i=0;i<4;i++) for(int j=0;j<4;j++) if(q.front().v.S[i][j]=='1') { for(int k=0;k<4;k++) { int ti=i+di[k],tj=j+dj[k]; if(check(ti,tj)) { Squ tmp=q.front().v; swap(tmp.S[i][j],tmp.S[ti][tj]); work(tmp); } } } q.pop(); } return 0; }
相关文章推荐
- [BZOJ1054]HAOI2008移动玩具|bfs
- bzoj 1054: [HAOI2008]移动玩具 (bfs)
- [BZOJ1054][HAOI2008]移动玩具 bfs+hash
- [BZOJ1054][HAOI2008]移动玩具(bfs+hash)
- BZOJ 1054: [HAOI2008]移动玩具( BFS )
- BZOJ 1054: [HAOI2008]移动玩具 BFS, Hash
- 【BZOJ 1054】 [HAOI2008]移动玩具 bfs
- BZOJ 1054 [HAOI2008]移动玩具 BFS
- 【bzoj1054】[HAOI2008]移动玩具 Bfs
- [BZOJ1054][HAOI2008]移动玩具(bfs+Hash)
- 【BZOJ1054】[HAOI2008]移动玩具 BFS
- 【BZOJ1054】[HAOI2008]移动玩具【BFS】【Hash】
- 【BZOJ】1054: [HAOI2008]移动玩具(bfs+hash)
- [BZOJ]1054: [HAOI2008]移动玩具BFS
- bzoj 1054: [HAOI2008]移动玩具 bfs
- [BZOJ1054][HAOI2008]移动玩具(bfs+hash)
- 【BZOJ 1054】 [HAOI2008]移动玩具
- BZOJ_P1054 [HAOI2008]移动玩具(BFS)
- bzoj 1054: [HAOI2008]移动玩具
- BZOJ1054: [HAOI2008]移动玩具