• 华为机考:HJ43 迷宫问题


    华为机考:HJ43 迷宫问题

    描述

    在这里插入图片描述

    DFS

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

    #include
    #include
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    华为机考:HJ43 迷宫问题

  • 相关阅读:
    【Day1】01背包问题|Python
    爬虫-从入门到入狱
    Spring Cloud教程 第十二弹 Spring Cloud Config整合Spring Cloud Bus实现配置动态刷新
    文件上传基础详解
    如何在 SwiftUI 中创建条形图
    ARM GIC 和NVIC的区别
    Kotlin(十)类的继承
    Linux 权限
    右键发送到菜单+批处理实现批量自动化为文件名添加统一的后缀
    Unity之ShaderGraph如何实现UV抖动
  • 原文地址:https://blog.csdn.net/yuanshenzhilu/article/details/136680324