玄关求调输出多组重复数据

P1238 走迷宫

@[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


|