@[LawrenceLoyaldog](/user/1042335)
# mistake1
dfs终止条件错误
```cpp
if(r==fy&&c==fy){
```
改为
```cpp
if(r==fx&&c==fy){
```
# mistake2
judge中边界判定错误
应改为:
```cpp
if(a<1||b<1||a>m||b>n)return 0;
```
by ZYLZPP @ 2024-04-27 21:23:52
@[LawrenceLoyaldog](/user/1042335)
# mistake3
初始sx,sy需标记为已访问
否则会重复输出
```cpp
v.push_back(pair<int,int>(sx,sy));
vis[sx][sy] = 1;
```
# AC code
```cpp
#include <bits/stdc++.h>
using namespace std;
int m,n,sx,sy,fx,fy,t;
bool vis[105][105];
int x[4]={0,-1,0,1};
int y[4]={-1,0,1,0};
int ans=-1;
bool judge(int a,int b){
if(a<1||b<1||a>m||b>n)return 0;
if(vis[a][b]==1)return 0;
return 1;
}
void dfs(int r,int c,vector<pair<int,int> > &v){
if(r==fx&&c==fy){
cout <<'('<<v[0].first<<','<<v[0].second<<')';
for(int i=1;i<v.size();i++){
cout << "->";
cout <<'('<<v[i].first<<','<<v[i].second<<')';
}
cout<<endl;
ans=0;
return ;
}
for(int i=0;i<4;i++){
if(judge(r+x[i],c+y[i])){
vis[r+x[i]][c+y[i]]=1;
v.push_back(pair<int,int>(r+x[i],c+y[i]));
dfs(r+x[i],c+y[i],v);
vis[r+x[i]][c+y[i]]=0;
v.pop_back();
}
}
}
int main(){
cin >> m>>n;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin >> t;
if(t==0)vis[i][j]=1;
}
}
cin >> sx>> sy>>fx>>fy;
vector<pair<int,int> > v;
v.push_back(pair<int,int>(sx,sy));
vis[sx][sy] = 1;
dfs(sx,sy,v);
if(ans==-1)cout << ans;
return 0;
}
```
by ZYLZPP @ 2024-04-27 21:26:16
@[ZYLZPP](/user/932511) %%%大佬已关(现关致歉)
by LawrenceLoyaldog @ 2024-04-27 22:02:47
@[ZYLZPP](/user/932511) %%%%大佬已关
by LawrenceLoyaldog @ 2024-04-27 22:03:29
磁贴结
by LawrenceLoyaldog @ 2024-04-27 22:05:15