有自己的博客辣!!

今天有自己的博客啦!!!

你看我给兴奋的,当场做了两道深搜水题+

洛谷ID : yanjiuxi_love_kc(也不知道当初怎么起的这nt名字)

今天就说一下深搜的入门题8

B3625 迷宫寻路

 

题目传送门 B3625 迷宫寻路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

 

这是一道深搜的基础题(当然BFS也是可以的),里面就考虑能不能出去,并没有回溯等深层知识的运用(侧面反映)

这里贴上第三种做法哒!!

#include <bits/stdc++.h>
using namespace std;
char c[110][110];  //题目要求 1 <= n, m <= 100 开大一点
int n, m;
bool f = false;  //记录能不能到终点
int fx[5] = {0, 0, 1, 0, -1};    //这里注意理解,fx数组指的是在右下左上方向中x(横移动),可以自己画图理解
int fy[5] = {0, 1, 0, -1, 0};    //fy与fx作用差不多,(0,1)代表向右移动
void dfs(int x, int y)
{
  if (x == n and y == m)    //如果找到,就退出深搜,标记方便输出
  {
    f = true;
    return ;
  }
  for (int i = 1;i <= 4;i++)
  {
    int tx = x + fx[i];    //这里就用到了fx,fy数组来表示方向的移动
    int ty = y + fy[i];
    if (tx >= 1 && tx <= n && ty >= 1 && ty <= m && c[tx][ty] == '.')    //判断,如果下一个方向还没有被走,就可以继续搜索,否则不然
    {
      c[x][y] = '#';    //对已走过的店c[x][y]进行标记防止重复
      dfs(tx, ty);    //继续深搜
    }
  }
}
signed mian()    //防抄袭标志~
{
  cin >> n >> m;
  for (int i = 1;i <= n;i++)
  {
    for (int j = 1;j <= m;j++)    //输入没啥好说
    {
      cin >> c[i][j];
    }
  }
  if (c[1][1] == '#' or c[n][m] == '#') cout << "No";    //如果起点和终点任意有一个不可行,那就不用搜索,直接就输出no
  else dfs(1, 1);
  if (f) cout << "Yes";    //bool标记
  else cout << "No";
  return 0;      //每天好习惯+华丽结束
}

 

posted @ 2023-05-23 18:36  筱屿晚  阅读(196)  评论(1)    收藏  举报