50分求助

P1605 迷宫

@[ElevenQ](/user/792437) 貌似这句有点不对? ```cpp if(xx>=sx&&xx<=fx&&yy>=sy&&yy<=fy&&G[xx][yy]!=1&&vis[xx][yy]==0) ``` 应该要改为 ```cpp if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&G[xx][yy]!=1&&vis[xx][yy]==0) ```
by Night_sea_64 @ 2022-12-25 08:27:20


@[ElevenQ](/user/792437) 还有,在 `dfs` 之前要 `vis[sx][sy]=1`
by SlaineTroyard @ 2022-12-25 08:30:58


```if(xx>=sx&&xx<=fx&&yy>=sy&&yy<=fy&&G[xx][yy]!=1&&vis[xx][yy]==0)``` 改为 ```if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&G[xx][yy]!=1&&vis[xx][yy]==0)``` 附上代码,希望能帮到你 ``` #include<bits/stdc++.h> using namespace std; #define MAX 11 const int fx[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; bool book[MAX][MAX],a[MAX][MAX]; int n,m,T,ans,xx1,yy1,xx2,yy2; bool check(int x,int y) { return (x>=1&&y>=1&&x<=n&&y<=m&&!a[x][y]&&!book[x][y]); } void dfs(int x,int y) { if(x==xx2&&y==yy2) { ans++; return; } book[x][y]=true; for(int i=0;i<4;i++) { if(check(x+fx[i][0],y+fx[i][1])) { dfs(x+fx[i][0],y+fx[i][1]); } } book[x][y]=false; } int main() { scanf("%d%d%d%d%d%d%d",&n,&m,&T,&xx1,&yy1,&xx2,&yy2); while(T--) { int x,y; scanf("%d%d",&x,&y); a[x][y]=true; } dfs(xx1,yy1); printf("%d",ans); return 0; } ```
by Sexy_Foxy @ 2022-12-25 08:35:25


@[Netherite_sword_666](/user/554145) 感谢大佬帮助,加上下面那位同志的帮助,现已AC(鞠躬)(哭泣) _还想追问一句就是,我原来错误是因为边界值定成了起始点那一圈的边界而非迷宫本身的边界?_ 再次感谢
by ElevenQ @ 2022-12-25 13:05:58


@[Franz_Liszt](/user/450246) ###### aaa谢谢大佬(鞠躬)(哭泣) 这种忘记初值的逝不想再犯了(悲)
by ElevenQ @ 2022-12-25 13:09:34


@[ElevenQ](/user/792437) 啊,是的。。 而且 vis[sx][sy]=1 不加问题应该也不大
by Night_sea_64 @ 2022-12-25 13:10:14


~~好吧我瞎了,好像还是得要加~~
by Night_sea_64 @ 2022-12-25 13:11:54


我用的 dfs 过的此题
by Night_sea_64 @ 2022-12-25 13:12:51


@[Netherite_sword_666](/user/554145) 问题还是挺大的,逝了一下70分(doge
by ElevenQ @ 2022-12-25 13:13:34


@[Killer_Jerry](/user/781352) 感谢帮助,现已AC (大佬好贴心((
by ElevenQ @ 2022-12-25 13:21:49


|