30分,求讲解

P1605 迷宫

```cpp #include<bits/stdc++.h> using namespace std; int n,m,t,one,two; int sx,sy,fx,fy; int a[6][6]; int ans=0; int dx[5]={0,0,1,0,-1};//右下左上 int dy[5]={0,1,0,-1,0}; bool vis[6][6]; void dfs(int x,int y){ if(x==fx&y==fy){//特判,如果起点==终点,结果只为1 ans++; return;//结束 } int tx,ty;//当前坐标 for(int i=1;i<=4;i++){ tx=x+dx[i];//让行和列分别加上方向 ty=y+dy[i]; if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&vis[tx][ty]==0){ //判断是否越界,已经下一步是否走过 vis[tx][ty]=1;//走完后标记成1 ,不然会死循环 dfs(tx,ty);//将走完后的下标再传过去 vis[tx][ty]=0;//回溯,因为求的是方案总数 } } } int main () { cin>>n>>m>>t;//输入 cin>>sx>>sy>>fx>>fy;//起点,终点坐标 for(int i=1;i<=t;i++){ cin>>one>>two;//输入障碍物的坐标 vis[one][two]=1;//障碍物走不了,标记成1 } vis[sx][sy]=1;//起点和终点也都标记成1 dfs(sx,sy);//将起点坐标传值 cout<<ans; } ```
by Lv_666 @ 2023-08-20 10:36:33


|