首页 > 其他分享 >洛谷 B3625 迷宫寻路

洛谷 B3625 迷宫寻路

时间:2024-03-14 22:30:35浏览次数:25  
标签:ch 洛谷 vis int B3625 nx ny continue 寻路

本道题需要注意:如果孩子的起始位置就是‘#’,那孩子就无路可走,出不来了。

所以需要特判一下,代码如下:(这是废话,不需要特判,注意题目要求)

if(ch[1][1]=='#'){
		printf("No\n");
	}

注意边界条件:

if(nx<1 || nx>n || ny<1 || ny>m){
			continue;
		}
		if(vis[nx][ny]==1){
			continue;
		}
		if(ch[nx][ny]=='#'){
			continue;
		}

dfs深度优先搜索函数如下:

void dfs(int x,int y){
	if(x==n && y==m){
		flag=true;
		printf("Yes\n");
		exit(0);
	}
	vis[x][y]=1;
	for(int i=0;i<4;i++){
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(nx<1 || nx>n || ny<1 || ny>m){
			continue;
		}
		if(vis[nx][ny]==1){
			continue;
		}
		if(ch[nx][ny]=='#'){
			continue;
		}
		dfs(nx,ny); 
	}
}

完整代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N=105;
char ch[N][N];
int vis[N][N]; 
int dx[]={-1,1,0,0};		//dx,dy表示上下左右走的顺序; 
int dy[]={0,0,-1,1};
bool flag=false;
int n,m;
void dfs(int x,int y){
	if(x==n && y==m){
		flag=true;
		printf("Yes\n");
		exit(0);
	}
	vis[x][y]=1;
	for(int i=0;i<4;i++){
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(nx<1 || nx>n || ny<1 || ny>m){
			continue;
		}
		if(vis[nx][ny]==1){
			continue;
		}
		if(ch[nx][ny]=='#'){
			continue;
		}
		dfs(nx,ny); 
	}
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>ch[i][j];
		}
	}
	if(ch[1][1]=='#'){
		printf("No\n");
	}
	else{
		dfs(1,1);
		if(!flag){
			printf("No\n");
		}
	}
	return 0;
}

标签:ch,洛谷,vis,int,B3625,nx,ny,continue,寻路
From: https://blog.csdn.net/xiebohang/article/details/136723778

相关文章

  • 洛谷 P3596 [POI2015] MOD 题解
    题意简述给定一棵树,求断掉一条边再连上一条边所得的新树直径最小值和最大值,以及相应方案(你可以不进行任何操作,即断掉并连上同一条边)。题目分析假设我们枚举断掉某一条边,得到了两棵树,并且知道它们的直径分别为\(d_0,d_1\),那么如何连接一条边让新树的直径最大/最小呢?最大:显......
  • 洛谷 P3261 [JLOI2015] 城池攻占 题解
    题目分析其他人要么倍增,要么左偏树,那我就来讲讲朴实无华的dfs序加上线段树的做法。首先发现题目中明确指出了作乘法的时候一定是乘上一个大于零的数,这是为什么呢?首先把可以占领当前城池的战斗力的不等式列出来:\[h_j\le\left\{\begin{array}{c}s_i\timesv_j&&{a_j=......
  • 洛谷题单指南-二叉树-P5076 【深基16.例7】普通二叉树(简化版)
    原题链接:https://www.luogu.com.cn/problem/P5076题意解读:此题本质上是要实现一个二叉搜索树的功能。解题思路:从数据规模10^4来看,只要复杂度在n^2范围内基本上是可以通过的,下面给出两种做法:1、有序数组法对应5个操作的实现逻辑如下:操作一:查x的排名。直接通过二分查找>=x的第......
  • C语言:洛谷数组题目(2)(冰雹猜想,校门外的树,旗鼓相当的对手)
    目录1.前言2.三则题目1.冰雹猜想1.题目描述2.输入格式3.输出格式4.题解2.校门外的树1.题目描述2.输入格式3.输出格式4.题解3.旗鼓相当的对手1.题目描述2.输入格式3.输出格式4.题解3.小结1.前言今天小蒟蒻继续为大家分享洛谷数组题单题解,一共三道题,希望大......
  • 洛谷题单指南-二叉树-P4913 【深基16.例3】二叉树深度
    原题链接:https://www.luogu.com.cn/problem/P4913题意解读:计算二叉树的深度解题思路:首先介绍二叉树的存储方式,对于本题,直接用数组模拟,数组的下标即节点号structnode{intl,r;}tree[N];tree[i].l存的是节点i的左子结点,tree[i].r存的是节点i的右子节点。计算深度至......
  • 洛谷 P4173 残缺的字符串 卡常小记
    首先,使用匹配函数\(P(x_i,x_j)=x_ix_j-x_i^2[j\neq0]\)。容易发现,当存在\(i\neqj\)时,\(x_ix_j\)的系数只会增加,因此根据Schwartz-Zippel引理,随机一组\(x_{1\sim26}\)对应a~z即可。然后,对于NTT的过程,有两个卡常的点:一是点积reverse后转卷积的过程是舍......
  • STL中的set——洛谷P5250
     1.作用/与优先队列的区别(1)插入一个元素,自动排序,保证其内部元素有序(升序)。优先队列也可以做到这一点。(2)支持任意增删一个元素,而优先队列做不到这一点,这是两者其中一个区别。(3)使用set的前提是唯一键值对,保证了其内部没有重复元素,而优先队列内部同一元素可以有多个,这是两者......
  • 字符串哈希——洛谷P3370
    1.简介本文主要介绍三种实现哈希表的方法:进制哈希,set哈希,map哈希。2.进制哈希#include<iostream>#include<vector>#definemod1000usingnamespacestd;intn,hs,ans;vector<string>a[mod];//数组开多大,取决于mod取多大strings;......
  • 二分+前缀和——洛谷P1314
    1.公式解读[...]  括号内内容为真则其值等于1,内容为假则其值等于0 2.思路这是一个关于单调性判定的问题,当W不断增大,差值由大变小再变大(实际是从负到0到正,只不过要取绝对值,不影响它的单调性),而目标则是在0的附近找到一个绝对值最小的值,因此是一道二分答案题,但如果......
  • 洛谷P6866 [COCI2019-2020#5] Emacs
    题目描述给定一个n×m 的只含有 . 和 * 的矩阵。矩阵中 * 形成一些不重叠的长方形。它们不在边缘或顶点接触。求长方形有多少个?输入格式第一行:两个正整数 n 和 m。以下 n 行:表示题目描述中的矩阵。矩阵只含有 . 和 *。输出格式一行一个非负整数,你的答......