60分求助(dfs)

B3625 迷宫寻路

Aelt @ 2024-02-04 15:29:54

#include <bits/stdc++.h>

using namespace std;
int n,m,a[105][105];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
char b;
bool flag=false;
void dfs(int x,int y){
    if(x==n&&y==n){
        flag=true;
        return;
    }
    a[x][y]=1;
    for(int i=0;i<4;i++){
        int nx=x+dx[i];
        int ny=y+dy[i];
        if(nx>m||ny>n||nx<1||ny<1||a[nx][ny]==1)continue;
        dfs(nx,ny);
    }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>b;
            if(b=='#')a[i][j]=1;
            else a[i][j]=0;
        }
    }
    dfs(1,1);
    if(!flag)cout<<"No";
    else cout<<"Yes";
    return 0;
}

by Aelt @ 2024-02-04 15:35:14

A了一点,现在70分了


by 汪汪队队长1 @ 2024-02-04 15:39:20

if(x==n&&y==n)

这里,题目中一个n一个m,你两个都是n。


by Aelt @ 2024-02-04 15:42:35

@汪汪队队长1 改了,成70分了


by 汪汪队队长1 @ 2024-02-04 15:45:25

if(nx>m.......

第18行,nx应该大于n


by Lemondsb @ 2024-02-04 15:47:37

@js2024 ```cpp

include <bits/stdc++.h>

using namespace std; int n,m,a[105][105]; int dx[]={1,-1,0,0}; int dy[]={0,0,1,-1}; char b; bool flag=false; void dfs(int x,int y){ if(x==n&&y==m){ //这里 flag=true; return; } a[x][y]=1; for(int i=0;i<4;i++){ int nx=x+dx[i]; int ny=y+dy[i]; if(nx>n||ny>m||nx<1||ny<1||a[nx][ny]==1)continue; //这里 dfs(nx,ny); } } int main() { cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>b; if(b=='#')a[i][j]=1; else a[i][j]=0; } } dfs(1,1); if(!flag)cout<<"No"; else cout<<"Yes"; return 0; }


把xy和nm的对应搞反了

by Aelt @ 2024-02-04 15:48:09

@汪汪队队长1 还系不行


by Lemondsb @ 2024-02-04 15:49:57

@MAXdsb

就是把x==n&&y==n改为x==n&&y==m

把nx>m||ny>n||nx<1||ny<1||a[nx][ny]==1改为nx>n||ny>m||nx<1||ny<1||a[nx][ny]==1


by 汪汪队队长1 @ 2024-02-04 15:50:06

@js2024 ny也反了,同一行,ny>m,我自己交了过了


by Aelt @ 2024-02-04 15:52:01

@MAXdsb A过去了!感谢


by Aelt @ 2024-02-04 15:57:04

@汪汪队队长1 感谢,AC了


|