A22611.迷宫 题解
2026-06-06 23:26:48
发布于:四川
7阅读
0回复
0点赞
拿脚趾头0秒看出来这是一道电风扇(dfs
这道题的数据量是真的小,N和M最大只有5
没啥说的其实,就是一道经典的电风扇
AC代码
#include <iostream>
#include <cstdio>
using namespace std;
int a[6][6];
bool vis[6][6];
int dir[4][2]={-1,0,0,-1,0,1,1,0};
int n,m,t,x1,y1,x2,y2,x,y;
bool check(int x, int y){
if(x<1||x>n) return 0;
if(y<1||y>m) return 0;
if(vis[x][y]) return 0;
return 1;
}
int dfs(int x,int y){
if(x==x2&&y==y2) return 1;
int ct=0;
vis[x][y]=1;
for(int i=0;i<4;i++){
int xx=x+dir[i][0],yy=y+dir[i][1];
if(check(xx,yy)) ct+=dfs(xx,yy);
}
vis[x][y]=0;
return ct;
}
int main(){
cin>>n>>m>>t>>x1>>y1>>x2>>y2;
while(t--){
cin>>x>>y;
vis[x][y]=1;
}
cout<<dfs(x1,y1);
return 0;
}
这里注意17行的
vis[x][y]=1;
以及22行的
vis[x][y]=0;
分别是标记和释放x,y
若不标记x,y会被重复判断;
标记完自然也要释放,不然x,y会被视为障碍物
不管了再凑几行题解吧
平时我个人喜欢用
const int dx[4]={0,0,1,-1};
const int dy[4]={1,-1,0,0};
这种写法
但这里用到了
int dir[4][2]={-1,0,0,-1,0,1,1,0};
这种写法
可以剩一个数组,但我觉得没有前者好理解
其实我是来水题解的,看到的点个赞吧

放张teto梨在这儿,为啥我这儿看不到
这里空空如也





有帮助,赞一个