SHUOJ 1659 跳马问题 (BFS)

题目:SHUOJ-1659

题目链接:http://202.121.199.212/JudgeOnline/problem.php?id=1659

题目:

1659: 跳马问题

Time Limit: 1 Sec   Memory Limit: 32 MB
Submit: 271   Solved: 75
[ Submit][ Status][ Web Board]

Description

给定8*8方格棋盘,求棋盘上一只马从一个位置到达另一位置的最短路径长。

注意马是走“日”形的。

Input

输入有若干测试数据。

每组测试数据仅1行,每行上有2个方格pos1、pos2,之间用一个空格隔开,每格方格表示棋盘上的一个位置,该位置由表示列的1个字母(a-h)及表示行的一个数字(1-8)构成,如“d7”表示第4列第7行。

Output

对输入中每行上的2个方格pos1、pos2,输出马从位置pos1跳到pos2所需的最短路径长。如“a1==>a2: 3 moves”表示从位置a1跳到a2所需的最少步数是3。

注意:按输出样例所示格式输出,如“a1==>a2: 3 moves”中冒号后有一个空格,再跟着所需的最少步数。

Sample Input

a1 a2
a1 a3
a1 h8
g2 b8

Sample Output

a1==>a2: 3 moves
a1==>a3: 2 moves
a1==>h8: 6 moves
g2==>b8: 5 moves

经典的BFS,题目本身也没有什么好说的,只是要跳8个方向,和之后的几个单侧跳马问题是同一类的,全部用BFS来求最短路,注意字母转化成数字。

额,什么?BFS不会=-=,那你会了再来看吧,建议移步BFS第一篇博客有讲原理~

什么?SHUOJ是什么鬼没听说过?这是我们学校的OJ(捂脸),虽说不怎么样,但有些题目还是值得一做的=-=

上代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
const int maxn=10005;
int map[10][10];
int dir[8][2]={{-1,2},{-2,1},{2,1},{1,2},{-1,-2},{-2,-1},{2,-1},{1,-2}};
char aa,cc;
int a,b,c,d;
struct T{
    int x,y;
};
T sa,sb;                                        //我也觉得我变量名字起的好,2333
int bfs(int x,int y){
    queue<T> Q;
    sa.x=x;
    sa.y=y;
    map[x][y]=0;
    Q.push(sa);
    while(!Q.empty()){
        sa=Q.front();
        Q.pop();
        for(int i=0;i<8;i++){
            int xx=sa.x+dir[i][0];
            int yy=sa.y+dir[i][1];
            if(xx<=8 && xx>=1 && yy<=8&& yy>=1){
                sb.x=xx;
                sb.y=yy;
                if(map[sa.x][sa.y]+1<map[xx][yy]){
                    map[xx][yy]=map[sa.x][sa.y]+1;
                    Q.push(sb);
                }
                  
            }
        }
    }
}
int main(){
    while(cin>>aa>>b>>cc>>d){
        for(int i=0;i<=9;i++)
            for(int j=0;j<=9;j++)
                map[i][j]=maxn;
        a=aa-'a'+1;
        c=cc-'a'+1;
        bfs(a,b);
        cout<<aa<<b<<"==>"<<cc<<d<<": "<<map[c][d]<<" moves"<<endl;
    }
    return 0;
} 


你可能感兴趣的:(bfs,跳马问题)