第一次的迷宫为队列版,这个为搜索版x(自己写的嘿嘿)

Posted 云深不知处

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一次的迷宫为队列版,这个为搜索版x(自己写的嘿嘿)相关的知识,希望对你有一定的参考价值。

错误原因:第一次提交的时候把Yes跟No输错了都输为大写:……

代码来啦!

#include<cstdio>
#include<iostream>

using namespace std;

int m,n,tot;
int jz[2020][2020];
bool j[2020][2020];//初始为0

void ym(int x,int y) {
    j[x][y]=1;
    if(!j[x+1][y]&&jz[x+1][y]<=jz[x][y]&&x+1<=n) {
        ym(x+1,y);
        tot--;
    }
    if(!j[x][y+1]&&jz[x][y+1]<=jz[x][y]&&y+1<=m) {
        ym(x,y+1);
        tot--;
    }
    if(!j[x-1][y]&&jz[x-1][y]<=jz[x][y]&&x-1>0) {
        ym(x-1,y);
        tot--;
    }
    if(!j[x][y-1]&&jz[x][y-1]<=jz[x][y]&&y-1>0) {
        ym(x,y-1);
        tot--;
    }
}

void mm(int x1,int y1) {
    if(j[x1][y1]) printf("Yes\n");
    else printf("No\n");
}

int main() {

    scanf("%d%d",&n,&m);
    tot=n*m-1;
    for(int i=1; i<=n; ++i) {
        for(int j=1; j<=m; ++j) {
            scanf("%d",&jz[i][j]);
        }
    }
    int sx,sy;
    scanf("%d%d",&sx,&sy);
    j[sx][sy]=1;//进行标记,已经被淹没
    ym(sx,sy);
    printf("%d\n",tot);
    int q,xw,yw;
    scanf("%d",&q);
    for(int k=1; k<=q; ++k) {
        scanf("%d%d",&xw,&yw);
        mm(xw,yw);
    }

    return 0;
}

 

以上是关于第一次的迷宫为队列版,这个为搜索版x(自己写的嘿嘿)的主要内容,如果未能解决你的问题,请参考以下文章

[Algorithm]Java 版递归算法解迷宫问题哈诺塔问题八皇后问题

回溯算法走迷宫(Java版)

迷宫问题的求解(广度优先搜索)

C语言之迷宫小游戏2.0版(随机生成地图,可变颜色,优化游戏体验)

C语言之迷宫小游戏2.0版(随机生成地图,可变颜色,优化游戏体验)

C语言之迷宫小游戏2.0版(随机生成地图,可变颜色,优化游戏体验)