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
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了