洛谷——P1747 好奇怪的游戏

P1747 好奇怪的游戏

题目背景

《爱与愁的故事第三弹·shopping》娱乐章。

调调口味来道水题。

题目描述

爱与愁大神坐在公交车上无聊,于是玩起了手机。一款奇怪的游戏进入了爱与愁大神的眼帘:***(游戏名被打上了马赛克)。这个游戏类似象棋,但是只有黑白马各一匹,在点x1,y1和x2,y2上。它们得从点x1,y1和x2,y2走到1,1。这个游戏与普通象棋不同的地方是:马可以走“日”,也可以像象走“田”。现在爱与愁大神想知道两匹马到1,1的最少步数,你能帮他解决这个问题么?

输入输出格式

输入格式:

 

第1行:两个整数x1,y1

第2行:两个整数x2,y2

 

输出格式:

 

第1行:黑马到1,1的距离

第2行:白马到1,1的距离

 

输入输出样例

输入样例#1:  复制
12 16
18 10
输出样例#1:  复制
8 
9

说明

100%数据:x1,y1,x2,y2<=20

 

bfs

由于要进行两遍bfs,数组与队列记得要清空!

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 110
using namespace std;
bool vis[N][N];
int x1,y1,x2,y2,nx,ny,ans,dis[N][N];
int xx[12]={1,1,2,2,2,2,-1,-1,-2,-2,-2,-2};
int yy[12]={-2,2,-2,-1,1,2,-2,2,-1,1,-2,2};
int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    return  x*f;
}
struct Node
{
    int x,y;
}node,p;
queue<Node>q;
void bfs(int x,int y)
{
    while(!q.empty()) q.pop();
    memset(vis,0,sizeof(vis));
    memset(dis,0,sizeof(dis));
    node.x=x,node.y=y;dis[x][y]=0;
    q.push(node);vis[x][y]=true;
    while(!q.empty())
    {
        p=q.front();q.pop();
        x=p.x,y=p.y;
        if(x==1&&y==1) {ans=dis[x][y];return ;}
        for(int i=0;i<12;i++)
        {
            nx=x+xx[i],ny=y+yy[i];
            if(nx>50||ny>50||nx<1||ny<1||vis[nx][ny]) continue;
            vis[nx][ny]=true;
            dis[nx][ny]=dis[x][y]+1;
            p.x=nx,p.y=ny,q.push(p);
        }
    }
}
int main()
{
    x1=read(),y1=read();
    bfs(x1,y1);printf("%d\n",ans);
    x2=read(),y2=read();
    bfs(x2,y2);printf("%d",ans);
    return 0;
}

 

转载于:https://www.cnblogs.com/z360/p/8231137.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值