A7990.迷宫之方案数 DFS优质题解
2026-08-27 20:26:10
发布于:北京
1阅读
0回复
0点赞
注:本题解建议学过DFS的朋友们观摩
DFS
"一条路走到黑",撞到障碍,返回看哪一部还能走,类似于枚举这个点的上、下、左、右是否是障碍物,如果不是,则走。
坑🕳:每一次方案中,不能走同一个点(标记数组vis)
下一次方案要重置vis
话不多说上代码:::
#include <bits/stdc++.h>
using namespace std;
int n,m,t;
int sum = 0;
int sx,sy,fx,fy;
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
bool vis[10][10] = {0};
int mx[10][10];
void DFS(int x,int y){
if(x < 1 || x > n || y < 1 || y > m || vis[x][y] == 1 || mx[x][y] == -1){
return ;
}
vis[x][y] = 1;
if(x == fx && y == fy){
sum++;
vis[x][y] = 0;
return;
}
for(int i = 0; i < 4; i++){
int ex = x + dx[i];
int ey = y + dy[i];
DFS(ex,ey);
}
vis[x][y] = 0;
}
int main(){
cin>>n>>m>>t;
for(int i = 1; i <= n; i++){
for(int y = 1; y <= m; y++){
mx[i][y] = 0;
}
}
cin>>sx>>sy>>fx>>fy;
for(int i = 1; i <= t; i++){
int tx,ty;
cin>>tx>>ty;
mx[tx][ty] = -1;
}
DFS(sx,sy);
cout<<sum;
return 0;
}
这里空空如也






有帮助,赞一个