1027.马踏飞燕(续)SDNUOJ 1027(BFS)

Description
上次的马踏飞燕是不是没玩够?无聊的lg准备编写一款游戏,就是加强版的“马踏飞燕”,在这款游戏中有个一个2000*2000的坐标,把马放在任意一个坐标点,再把燕子放在任意一个坐标点,并且燕子不会移动,马只能按照象棋规则走“日”。若200步之内能“踏”到燕子,则成功。lg不知道该怎么去写,现在请你帮助他。
走“日”说明:当马的坐标为(5,5)的时候,马下一步可以走的坐标有8个点,分别为(4,3)(6,3)(3,4)(7,4)(3,6)(7,6)(4,7)(6,7)
Input
第一行两个整数,马的起始坐标x,y (0<x,y<2000)
第一行两个整数,燕子的坐标 m,n (0<m,n<2000)
Output
若4步之内能“踏”到燕子,则输出“Y”
若4步之内不能“踏”到燕子,则输出“N”
Sample Input
5 5
7 4
Sample Output
Y
记得标记已访问过的点,再回到这个点是没意义的!(受 sjy 师哥启发)
该BFS模(mu)板 也是该师哥提供,略加补充

#include <cstdio>
#include <iostream>
#include <queue>
#include <cstring>
#include <cmath>
using namespace std;
///目标数据范围(无)

///8个方向
int dir[][2] = {2,1,1,2,-1,2,-2,1,-2,-1,-1,-2,1,-2,2,-1};
///图的界线
const int p = 2005;
const int q = 2005;
///访问标记(无)
bool vis[p][q];
///图的赋值(无)

///结构体存下标
struct node
{
    int x, y, step;
}now,nex;

void bfs(int x, int y, int m,int n)
{
    now.x = x;
    now.y = y;
    now.step = 0;
    queue<node> Q;
    Q.push(now);
    ///此点访问标记
    vis[x][y] = 1;
    ///BFS 广搜
    while(!Q.empty())
    {
        ///首元素(排头)提取
        now = Q.front();
        ///用完出队
        Q.pop();
        ///检测是否符合所求
        if(now.step <= 200)
        {
            if(now.x == m && now.y == n)
            {
                cout << 'Y' << '\n';
                return ;
            }
        }
        else if(now.step > 200)
        {
            cout << 'N' << '\n';
            return ;
        }
        for(int i = 0; i < 8; i++)
        {
            ///将要搜索的下一个方向的坐标
            int xx = now.x + dir[i][0];
            int yy = now.y + dir[i][1];
            ///越界不搜索
            if(xx < 1 || xx > 2000 || yy < 1 || yy > 2000)
                continue;
            ///非目标点不搜索
            if(vis[xx][yy])
                continue;
            ///搜完标记
            vis[xx][yy] = 1;
            nex.step = now.step + 1;
            ///新搜的点加入队列搜
            nex.x = xx;
            nex.y = yy;
            Q.push(nex);
        }
    }
    return ;
}

int main()
{
    int x, y, m, n;
    while(~scanf("%d%d%d%d", &x, &y, &m, &n))
    {
        bfs(x,y,m,n);
    }
    return 0;
}


全部评论

相关推荐

03-08 18:11
门头沟学院 Java
想要实习的牛:这么牛逼的简历都吃瘪吗🌚那我不寄了
点赞 评论 收藏
分享
昨天 16:04
已编辑
安徽农业大学 算法工程师
痴心的她allin秋...:啥笔试都挂怎么办,某9本考研下岸,练也没时间了,对算法也不感兴趣,大部分大厂笔试只能A0-1个😄
米哈游笔试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务