UVa:10422 Knights in FEN (bfs+判重)
2013-10-23 07:05
267 查看
因为不懂knight的走法一直都跑不出样例来。。
思路很简单,用bfs搜索就行。另外必须的是判重。我这里又用了map,其实map效率比不上hash的,但是我不会写hash。。。
思路很简单,用bfs搜索就行。另外必须的是判重。我这里又用了map,其实map效率比不上hash的,但是我不会写hash。。。
#include<iostream> #include<cstdio> #include<cstring> #include<map> #include<queue> #include<algorithm> using namespace std; struct State { int step; int x,y; string vis[6]; }; string Convers(State t) { string tmp; for(int i=0; i<5; ++i) tmp+=t.vis[i]; return tmp; } map<string,bool> mp; int M[8][3]= {{1,-2},{-1,-2},{1,2},{-1,2},{2,1},{2,-1},{-2,-1},{-2,1}}; int main() { string dest="111110111100 110000100000"; int T; cin>>T; cin.ignore(); while(T--) { mp.clear(); State st; for(int i=0; i<5; ++i) getline(cin,st.vis[i]); string stt=Convers(st); if(stt==dest) printf("Solvable in 0 move(s).\n"); else { for(int i=0; i<5; ++i) { for(int j=0; j<st.vis[i].size(); ++j) { if(st.vis[i][j]==' ') { st.x=i; st.y=j; break; } } } st.step=0; queue<State> q; q.push(st); mp[stt]=true; int ans=0; bool ok=false; while(!q.empty()&&!ok) { State tmp=q.front(); if(tmp.step==10) break; q.pop(); for(int i=0; i<8&&!ok; ++i) { int nx=tmp.x+M[i][0],ny=tmp.y+M[i][1]; if(nx<0||ny<0||nx>4||ny>4) continue; State t=tmp; swap(t.vis[nx][ny],t.vis[tmp.x][tmp.y]); t.x=nx; t.y=ny; t.step=tmp.step+1; string tt=Convers(t); if(tt==dest) { ok=true; ans=t.step; break; } if(mp[tt]) continue; else { mp[tt]=true; q.push(t); } } } if(ok) printf("Solvable in %d move(s).\n",ans); else puts("Unsolvable in less than 11 move(s)."); } } return 0; }
相关文章推荐
- uva10152 ShellSort
- UVALIVE 4682: XOR Sum
- UVa:10815 - Andy's First Dictionary
- UVA 11107 - Life Forms(后缀数组)
- uva 10387 Billiard
- UVa 10801 Lift Hopping【floyd 】
- uva 1660 & poj 1966(点连通度)
- uva 11396 Claw Decomposition(二分图)
- Uva 10036 - Divisibility
- 紫书章五 大理石在哪 UVA 10474(stl排序查找)
- UVA 1146 Now or later
- uva 414 Machined Surfaces
- uva 784 Maze Exploration 染色 搜索水题 DFS
- uva 10673 - Play with Floor and Ceil(欧几里得算法)
- UVA409 - Excuses, Excuses!
- 陈老师的多校联合20140818||Uvalive 5683 模拟
- UVA - 10387 Billiard
- uva 439骑士的移动(图的最短路 bfs)
- UVA 12670 数位DP