30分WA求助

P1605 迷宫

我的代码: ``` #include<bits/stdc++.h> using namespace std; long long n,m,ans,t,sx,sy,fx,fy; long long dx[5]={0,1,0,-1,0},dy[5]={0,0,-1,0,1}; bool a[11][11],c[11][11]; void dfs(long long xx,long long yy) { if(xx==fx&&yy==fy) {ans++;return;} for(long long i=1;i<=4;i++) { xx+=dx[i];yy+=dy[i]; if(xx>0&&yy>0&&xx<=n&&yy<=m&&!a[xx][yy]&&!c[xx][yy]) { a[xx-dx[i]][yy-dy[i]]=1; dfs(xx,yy); a[xx-dx[i]][yy-dy[i]]=0; } xx-=dx[i];yy-=dy[i]; } } int main() { cin>>n>>m>>t>>sx>>sy>>fx>>fy; for(long long i=1;i<=t;i++) { long long x,y; cin>>x>>y; c[x][y]=1; } dfs(sx,sy); cout<<ans; return 0; } ``` 我是在循环里判越界就不进入下一层
by mzyc_yang2021 @ 2022-10-20 20:09:37


```cpp int ny = y = dy[i]; ``` ???
by hecc @ 2022-10-20 20:11:08


```cpp scanf("%d%d%d", &sx, &sy, &fx, &fy); ``` ???
by hecc @ 2022-10-20 20:13:19


```cpp #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int dx[5] = {0, 0, 0, 1, -1}, dy[5] = {0, 1, -1, 0, 0}; int n, m, t, sx, sy, fx, fy, ans; bool wa[10][10], vis[10][10]; void dfs(int x, int y) { if(x < 1 || x > n || y < 1 || y > m) return; if(wa[x][y] || vis[x][y]) return; if(x == fx && y == fy) { ans++; return; } vis[x][y] = true; for(int i = 1; i <= 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; dfs(nx, ny); } vis[x][y] = false; } int main() { scanf("%d%d%d", &n, &m, &t); scanf("%d%d%d%d", &sx, &sy, &fx, &fy); for(int i = 1; i <= t; i++) { int tmp1, tmp2; scanf("%d%d", &tmp1, &tmp2); wa[tmp1][tmp2] = true; } dfs(sx, sy); printf("%d", ans); return 0; } ``` AC
by hecc @ 2022-10-20 20:14:08


|