Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 11223 | Accepted: 6331 |
Description
Input
Output
Sample Input
e2 e4
a1 b2
b2 c3
a1 h8
a1 h7
h8 a1
b1 c3
f6 f6
Sample Output
To get from e2 to e4 takes 2 knight moves.
To get from a1 to b2 takes 4 knight moves.
To get from b2 to c3 takes 2 knight moves.
To get from a1 to h8 takes 6 knight moves.
To get from a1 to h7 takes 5 knight moves.
To get from h8 to a1 takes 6 knight moves.
To get from b1 to c3 takes 1 knight moves.
To get from f6 to f6 takes 0 knight moves.
数组不要开的太大。。还要记得将队列清空。。
#include<cstdio> #include<iostream> #include<cstring> #include<queue> #include<algorithm> #include<vector> using namespace std; const int N = 200; int n , m; char color[N][N]; int vist[N][N]; int dx[8] = {-2, -2, -1, -1, 1, 1, 2, 2}; int dy[8] = {-1, 1, -2, 2, -2, 2, -1, 1}; int xx; int yy; int ans; struct node { int x; int y; char c; int num; }; queue<node>q; node a, b; void bfs() { vist[a.x][a.y]=1; while( !q.empty() ) { node temp = q.front(); if( temp.x==b.x && temp.y==b.y ) { printf("To get from %c%d to %c%d takes %d knight moves.\n", a.c, a.y, b.c, b.y, temp.num); return ; } q.pop(); for(int i=0; i<8; i++) { xx = temp.x + dx[i]; yy = temp.y + dy[i]; if( xx<1 || xx>8 || yy<1 || yy>8 || vist[xx][yy]) continue; node next; next.x = xx; next.y = yy; next.num=temp.num+1; vist[xx][yy]=1; q.push( next ); } } } int main() { int i,j; while(~scanf("%c%d %c%d", &a.c, &a.y, &b.c, &b.y)) { getchar(); while( !q.empty() ) q.pop(); memset( vist, 0, sizeof(vist) ); a.x = a.c - 'a'+1; b.x = b.c - 'a'+1; node first; first.x = a.x; first.y = a.y; first.num=0; ans = 0; q.push( first ); bfs(); } return 0; }
POJ 2243 || HDU 1372:Knight Moves(BFS),布布扣,bubuko.com
POJ 2243 || HDU 1372:Knight Moves(BFS)
原文地址:http://blog.csdn.net/u013487051/article/details/37883505