| 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