uva 439 Knight Moves 骑士移动
2017-05-23 18:06
429 查看
这道题曾经写过,bfs。用队列,不多说了,上代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<queue> using namespace std; int map[10][10]; int visit[10][10]; int dist[10][10]; int dx[8]={-2,-2,-1,-1,1,1,2,2}; int dy[8]={-1,1,-2,2,-2,2,-1,1}; char a[5]; int x2,y2; struct node { int x,y; }; queue<node>q; int bfs(node T) { if(T.x==x2&&T.y==y2) { return dist[T.x][T.y]; } else { while(!q.empty()) { node m = q.front(); q.pop(); if(m.x==x2&&m.y==y2) return dist[m.x][m.y]; for(int i=0; i<8; i++) { int xx = m.x+dx[i]; int yy = m.y+dy[i]; if(!visit[xx][yy]&&xx>0&&yy>0&&xx<=8&&yy<=8) { node n ; n.x = xx; n.y = yy; q.push(n); dist[xx][yy] = dist[m.x][m.y]+1; visit[xx][yy] = 1; } } } } } int main() { int x1,y1,i,j; while(gets(a)) { y1 = a[0]-'a'+1; x1 = a[1]-'0'; y2 = a[3]-'a'+1; x2 = a[4]-'0'; //printf("%d %d %d %d\n",x1,y1,x2,y2); node T; T.x = x1; T.y = y1; memset(dist,0,sizeof(dist)); memset(visit,0,sizeof(visit)); q.push(T); bfs(T); printf("To get from %c%c to %c%c takes %d knight moves.\n",a[0],a[1],a[3],a[4],dist[x2][y2]); while(!q.empty()) { q.pop(); } } return 0; }
相关文章推荐
- uva 439 Knight Moves 骑士移动
- 习题 6-4 UVA 439 Knight Moves 骑士的移动
- 骑士的移动(Knight Moves,UVa 439)
- 习题6-4 骑士的移动(Knight Moves, UVa 439)
- 骑士的移动(Knight Moves, UVa 439)
- uva 439 Knight Moves(骑士的移动)BFS
- uva 439 Knight Moves(马移动) —— DFS + 剪枝
- Uva 439 - Knight Moves(骑士游历)
- UVA 439 骑士(Knight Moves ) 很基础的BFS
- uva 439 Knight Moves(BFS)
- uva439 - Knight Moves(BFS求最短路)
- UVa 439/HDU 1372/POJ 2243/ZOJ 1091 Knight Moves(BFS&纯数学方法)
- UVA 439 - Knight Moves
- Knight Moves UVA439
- uva439 - Knight Moves
- UVa 439 - Knight Moves
- UVa 439 & SDU 1372 - Knight Moves
- UVA 439 Knight Moves
- 暑假集训第四周周三赛F - Knight Moves 骑士的移动 STL
- hdu 1372 Knight Moves 骑士的移动 bfs--马走日