首页 > 技术文章 > 洛谷P1605 迷宫

LQS-blog 2022-03-12 15:27 原文

题目链接:https://www.luogu.com.cn/problem/P1605

比较经典的搜索题,其实题目不难,在某一程度上算是搜索题的模板,

需要注意的是在区分障碍物的处理方式;

注意事项和代码如下:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,t;
 4 int ans;
 5 int sx,sy,fx,fy;
 6 int l,r;
 7 bool vis[10][10];//标记数组 
 8 int a[10][10];
 9 int    dirx[4]={-1,0,1,0};//搜横 
10 int diry[4]={0,-1,0,1};//搜纵 
11 #define CHECK(x,y)(x>=0&&x<=n&&y>=0&&y<=m)
12 void dfs(int x,int y)
13 {
14     if(x==fx&&y==fy)
15     {
16         ans++;
17         return ;
18     }
19     for(int i=0;i<4;i++)
20     {
21         int newx=x+dirx[i];
22         int newy=y+diry[i];
23         if(CHECK(newx,newy)&&vis[newx][newy]==0&&a[newx][newy]==1)
24         {
25             vis[x][y]=1;//标记 
26             dfs(newx,newy);
27             vis[x][y]=0;//回溯 
28         }
29     }
30 }
31 int main()
32 {
33     ios::sync_with_stdio(false);
34     cin>>n>>m>>t;
35     cin>>sx>>sy>>fx>>fy;
36     for(int i=1;i<=n;i++)
37     {
38         for(int j=1;j<=m;j++)
39         {
40             a[i][j]=1;//为了区分障碍物,将所有坐标先赋1 
41          } 
42      } 
43      for(int i=1;i<=t;i++)
44      {
45          cin>>l>>r;//障碍物 
46          a[l][r]=0;//赋0 
47      }
48      dfs(sx,sy);
49      cout<<ans<<endl;
50     return 0;
51 }

 

推荐阅读