求助,玄关
  • 板块学术版
  • 楼主_TAT_
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/10/23 18:47
  • 上次更新2023/11/2 11:41:52
查看原帖
求助,玄关
1073331
_TAT_楼主2023/10/23 18:47

题目传送门。

这里是代码

#include<bits/stdc++.h>
using namespace std;
int n,m,sx,sy,p1,p2,t1,cnt=0;
int maze[1005][1005];
bool vis[1005][1005];
int dirx[4]={0,1,-1,0};
int diry[4]={1,0,0,-1};
bool in(int x,int y){
    return 0<=x&&x<=n&&0<=y&&y<=n&&vis[x][y]==0;
}
struct node{
    int x,y;
};
void bfs(int x,int y){
    queue<node> Q;
    Q.push((node){x,y});
    while(Q.size()){
        node t=Q.front();
        Q.pop();
        for(int i=0;i<4;i++){
            int dx=t.x+dirx[i];
            int dy=t.y+diry[i];
            if(in(dx,dy)==0 /*||maze[dx][dy]=='*'*/ ||t1<maze[dx][dy]) continue;//问题在这里
            Q.push((node){dx,dy});
            cout<<dx<<" "<<dy<<endl;
			vis[dx][dy]=1;
            cnt++;
            //vis[dx][dy]=1;
        }
    }
    return ;
}
int main(){
    cin>>n>>m>>p1>>p2;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>maze[i][j];
            if(i==p1&&j==p2){
                t1=maze[i][j];
            }
        }
    }
    bfs(p1,p2);
    cout<<cnt;
    return 0;
}

主要问题:在if(in(dx,dy)==0 /*||maze[dx][dy]=='*'*/ ||t1<maze[dx][dy]) continue;这里遇到了通过不了的点却还是在判断了四个方向后搜索了一遍

另:为什么把变量t1改成t就编译错误了?

附:用DFS也是一样的问题QWQ

解决问题有一关(不管多少个问题还是一关)回复也有一关!!

2023/10/23 18:47
加载中...