大钉骑马走江湖

来源:互联网 发布:监控找不到网络主机 编辑:程序博客网 时间:2024/04/25 23:24

江湖是什么,对于在象棋界厮杀的大钉来说,江湖就是一个矩阵,他的目标,就是在江湖之中骑着马,从他的位置出发,走到终点。

当然,大钉的马也遵从中国象棋中的“马走日”的规则,而且在矩阵中,也会有一些障碍物,马不能跳到障碍物上;如果大钉的马面前有障碍物,即被“别马腿”,那么他将不能跳向有障碍物的左前和右前这两个方向。

请问最少需要多少步,大钉才能骑着马跳到终点。

输入格式:

有多组测试样例。

每组第一行输入两个数 nn 和 mm,代表矩阵的行数和列数,2 \leq n \leq m < 1002nm<100

接下来输入 nn 行字符串,其中 's' 代表起点,'e' 代表终点,'.' 代表空地,'#' 代表障碍物。

输出格式:

对应每组输入,输出骑马跳到终点的最小步数,如果跳不到终点,输出 -11

样例1

输入:

3 3s.......e3 3s#....#.e

输出:

4-1这题死了,也是应该的,根本就没好好思考,注意实际问题性脑瓜子好笨啊#include<memory.h>#include<queue>#include<iostream>#include<stdio.h>#include<string.h>#include<string>#include<cstring>using namespace std;int yx,yy,lx,ly;int n,m;int book[120][120];char s[120][120];int dir[8][2]={1,2,1,-2,2,1,2,-1,-1,2,-1,-2,-2,1,-2,-1};struct node{    int x,y,step;};void bfs(){    memset(book,0,sizeof(book));    queue<node>q;    node a,b;    a.x=yx;    a.y=yy;    a.step=0;    q.push(a);    int t=0;    while(!q.empty())    {        a=q.front();        q.pop();        if(a.x==lx&&a.y==ly)        {            if(a.step==0)                break;                cout<<a.step<<endl;           // printf("%d\n",a.step);            t=1;            break;        }        for(int i=0;i<8;i++)        {            b.x=a.x+dir[i][0];            b.y=a.y+dir[i][1];            int fx=a.x+dir[i][0]/2;            int fy=a.y+dir[i][1]/2;            if(s[fx][fy]=='#')                continue;            if(b.x>=0&&b.x<n&&b.y>=0&&b.y<m&&s[b.x][b.y]!='#'&&!book[b.x][b.y])            {                book[b.x][b.y]=1;                b.step=a.step+1;                q.push(b);            }        }    }    if(t==0)      //  printf("-1\n");      cout<<"-1"<<endl;}int main(){    int i,j;    while(cin>>n>>m)    {        //getchar();        for(i=0;i<n;i++)        {            for(j=0;j<m;j++)            {                cin>>s[i][j];                //scanf("%c",&s[i][j]);                if(s[i][j]=='s')                {                    yx=i;                    yy=j;                }                if(s[i][j]=='e')                {                    lx=i;                    ly=j;                }            }        }        bfs();       // getchar(); getchar();    }    return 0;}
0 0
原创粉丝点击