UVA_439 Knight Moves
2017-08-16 07:20
656 查看
UVA_439 Knight Moves
题意
给出一个标准的象棋棋盘,给出马的起始位置和目标位置,问最少要跳几次解决
我大概是傻了,刚开始还不知道要怎么做…之前做的BFS题移动方向都是”上下左右”或者是”八连通”,一看到”走日字”就转不过弯了(⊙o⊙)…
所以这个题就是裸BFS
int maps[9][9],dis[9][9]; int dir[8][2]={{2,1},{2,-1},{-2,1},{-2,-1},{1,2},{1,-2},{-1,2},{-1,-2}}; int vis[9][9]; struct point { int x,y; point(int xx,int yy){x=xx;y=yy;} }; void bfs(point st,point ed) { queue<point> Q; Q.push(st); while(!Q.empty()) { point ans=Q.front(); Q.pop(); if(ans.x==ed.x&&ans.y==ed.y) return ; rep(i,0,8){ int nx=ans.x+dir[i][0],ny=ans.y+dir[i][1]; if(nx>0&&ny>0&&nx<9&&ny<9&&!vis[nx][ny]) { vis[nx][ny]=1; dis[nx][ny]=dis[ans.x][ans.y]+1; Q.push(point(nx,ny)); } } } } int main() { //open(); char c1,c2; int x,y,xx,yy; while(~scanf("%c%d %c%d",&c1,&y,&c2,&yy)) { getchar(); x=(c1+1)-'a'; xx=(c2+1)-'a'; memset(dis,0,sizeof(dis)); memset(vis,0,sizeof(vis)); point st(x,y),ed(xx,yy); vis[x][y]=1; dis[x][y]=0; bfs(st,ed); printf("To get from %c%d to %c%d takes %d knight moves.\n",c1,y,c2,yy,dis[xx][yy]); } }
相关文章推荐
- uva 439 Knight Moves
- uva_439 - Knight Moves
- UVA439 - Knight Moves
- UVA439 POJ2243 HDU1372 ZOJ1091 Knight Moves
- UVA - 439 - Knight Moves (BFS)
- uva 439 - Knight Moves
- UVa 439 - Knight Moves 搜索专题
- UVA - 439 Knight Moves
- UVA 439 Knight Moves
- UVA-439 Knight Moves
- UVA 439 Knight Moves
- UVA - 439 Knight Moves
- UVA 439 - Knight Moves
- UVa 439 - Knight Moves
- UVA 439 Knight Moves
- Uva 439 Knight Moves
- UVa 439 - Knight Moves
- UVA - 439 Knight Moves
- UVa 439,Knight Moves
- uva439 -- Knight Moves