华为机考:HJ43 迷宫问题

news/2024/7/20 22:44:38 标签: 华为, 深度优先, 算法

华为机考:HJ43 迷宫问题

描述

在这里插入图片描述

DFS

从迷宫入口开始进行dfs搜索,每次进入一个点,将其加入临时路径数组中,把该位改成0表示不能进入,然后依次搜索该位下、右、上、左四个方向的点,如果搜索的这个点可以进入则路径进入,如果四个方向都没有可以走的路表示此路不通,回溯——删去路径最后一个,重置该位为0. 找到横纵坐标都等于矩阵最后一位则表示找到路径,复制现有路径然后返回。

#include<iostream>
#include<vector>
using namespace std;
vector<pair<int,int>> res;
void dfs(vector<vector<int>>& matrix, int n, int m, int i, int j, vector<pair<int,int>>& paths) {
	//在每次递归调用时,程序首先将当前位置 (i, j) 记录到 paths 中,并将该位置标记为已经访问过。然后检查是否到达终点 (n-1, m-1),如果到达终点则将路径保存到全局变量 res 中,并返回。
	paths.push_back(make_pair(i, j));
	matrix[i][j] = 1;  
	if (i == n - 1 && j == m - 1) {
		res = paths;
		return;
	}
	//向下、向右、向上、向左。对于每个方向,判断是否在迷宫范围内且可以通行(值为0),如果满足条件则递归调用 dfs 继续搜索。
	if (i + 1 < n && matrix[i + 1][j] == 0) { //下
		dfs(matrix, n, m, i + 1, j, paths);
	}
	if (j + 1 < m && matrix[i][j + 1] == 0) { //右
		dfs(matrix, n, m, i, j + 1, paths);
	}
	if (i - 1 >= 0 && matrix[i - 1][j] == 0) {  //上
		dfs(matrix, n, m, i - 1, j, paths);
	}
	if (j - 1 >= 0 && matrix[i][j - 1] == 0) {   //左
		dfs(matrix, n, m, i, j - 1, paths);
	}
	paths.pop_back();
	matrix[i][j] = 0;
}

int main()
{
	int n, m;
	while (cin >> n >> m) {
		vector<vector<int>> matrix(n, vector<int>(m,0));
		for (int i = 0; i < n; ++i) {
			for (int j = 0; j < m; ++j) {
				cin >> matrix[i][j];
			}
		}
		vector <pair<int, int >> paths;
		dfs(matrix, n, m, 0, 0, paths);
		for (int i = 0; i < res.size(); ++i) {
			cout << "(" << res[i].first << "," << res[i].second << ")" << endl;
		}
	}
	return 0;
}

华为机考:HJ43 迷宫问题


http://www.niftyadmin.cn/n/5426558.html

相关文章

小程序内嵌web-view实现路由切换到同级页面无效的解决方案

如果与当web-view不处于同一层级目录下&#xff0c;直接使用 uni.navigateTo({url:‘xxxx’});即可实现跳转&#xff0c;如果处于同级目录下需要使用 uni.switchTab({url:‘xxxx’}),并且声明url时候需要注意是…/的形式&#xff0c;比如web-view在pages/chat/index.vue ,跳转到…

vsto excel禁用属性提升性能

Globals.ThisAddIn.Application.EnableEvents false; Globals.ThisAddIn.Application.DisplayStatusBar false; Globals.ThisAddIn.Application.ScreenUpdating false; Globals.ThisAddIn.Application.Calculation Excel.XlCalculation.xlCalculationManual; 上述代码片段…

G6.antv自定义箭头 懒加载数据 箭头丢失

懒加载数据会导致箭头消失&#xff0c;只能自定义箭头 层次图&#xff1a;dagre 折线&#xff1a;polyline 设置endArrow&#xff1a;true 接口懒加载数据&#xff0c;执行 this.graph.read(this.graphData); this.graph.zoom(0.6);箭头消失&#xff0c;需自定义箭头 空心箭头…

开源办公系统CRM管理系统

基于ThinkPHP6 Layui MySQL的企业办公系统。集成系统设置、人事管理、消息管理、审批管理、日常办公、客户管理、合同管理、项目管理、财务管理、电销接口集成、在线签章等模块。系统简约&#xff0c;易于功能扩展&#xff0c;方便二次开发。 服务器运行环境要求 PHP > 7.…

二级Java程序题--01基础操作:源码大全(all)

目录 1.基本操作&#xff08;源代码&#xff09;&#xff1a; 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31 1.32 1.33 1.34 1.…

突破编程_C++_设计模式(状态模式)

1 状态模式的基本概念 C 中的状态模式是一种行为设计模式&#xff0c;它允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类。状态模式将特定状态相关的行为封装在独立的类中&#xff0c;并将请求委托给当前状态对象来处理。状态模式通过将行为封装在单…

LInux系统架构----Nginx模块rewrite的规则与应用场景

LInux系统架构----Nginx模块rewrite的规则与应用场景 一.rewrite跳转实现 Nginx实现跳转通过ngx_http_rewrite_module模块支持URL重写、支持if条件判断&#xff0c;但是不支持else跳转时&#xff0c;循环最多可以执行10次&#xff0c;超过后nginx将返回500错误注&#xff1a;…

Android adb启动app方式

文章转载于&#xff1a;https://www.shuran.cn/?p1035 一、安装ADB工具 下载ADB工具&#xff0c;官网adbshell.com 下载地址&#xff1a;http://www.adbshell.com/upload/adb.zip windows&#xff0c;下载安装&#xff0c;两个方法 ①懒人&#xff0c;解压缩&#xff0c;复制…