首页 > 代码库 > 第一次的迷宫为队列版,这个为搜索版x(自己写的嘿嘿)

第一次的迷宫为队列版,这个为搜索版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(自己写的嘿嘿)