今天有自己的博客啦!!!
你看我给兴奋的,当场做了两道深搜水题+
洛谷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; //每天好习惯+华丽结束
}
标签:cout,tx,ty,int,fy,自己,博客,fx From: https://www.cnblogs.com/xiaoyuwan/p/17426095.html