• 面试题目-最小代价的寻路问题


    题目:

      给定一个矩阵,表示一张游戏地图,数组中有 0 和 1 的值,0 表示可以通过,1 表示障碍,不能通过。求:给定一个起点坐标,一个终点坐标,求起点 - 终点的最短路径。《九鼎无双面试题》

    思路:

      深搜 + 回溯 + 标记 + 恢复。

    Java 版:

    import java.util.ArrayList;
    import java.util.List;
    
    public class Map {
        public static void main(String[] args) {
            int[][] map = new int[][]{
                    {1,0,1,1,0,0,0},
                    {0,0,0,0,0,1,0},
                    {0,1,0,0,1,1,0},
                    {0,0,0,1,0,0,0},
                    {1,1,0,0,0,0,1}
            };
            List<Integer> res = new ArrayList<>();
            searchMinPath(map,0,1,1,6,0,res);
            int ans = Integer.MAX_VALUE;
            for(int value : res){
                ans = ans < value ? ans : value;
            }
            System.out.println(ans);
        }
        public static void searchMinPath(int[][] map,int current_i, int current_j, int end_i, int end_j,int countPath, List<Integer> res){//(current_i, current_j)当前坐标,(end_i, end_j)目标终点坐标;countPath 已经走了多少步了,res 记录走到终点的多少种方式
            if(current_i < 0 || current_i >= map.length || current_j < 0 || current_j >= map[0].length
                    || map[current_i][current_j] == -1 || map[current_i][current_j] == 1) return; //出界、走过、是障碍,返回
            if(current_i == end_i && current_j == end_j){ // 到达终点
                res.add(countPath); // 加入结果集
                return;
            }
            int tmp = map[current_i][current_j]; // 记录值,以便后面恢复现场
            map[current_i][current_j] = -1; // 当前已经走过了,标记为 -1
            searchMinPath(map,current_i + 1, current_j,end_i,end_j,countPath + 1, res);//4个方向上遍历
            searchMinPath(map,current_i - 1, current_j,end_i,end_j,countPath + 1, res);
            searchMinPath(map,current_i, current_j + 1,end_i,end_j,countPath + 1, res);
            searchMinPath(map,current_i, current_j - 1,end_i,end_j,countPath + 1, res);
            map[current_i][current_j] = tmp; // 恢复现场
        }
    }
  • 相关阅读:
    iOS之CALayer属性简介
    iOS之UIGraphics.h方法简介
    iOS之CGcontext.h方法和属性简介
    iOS之CATiledLayer的属性简介和使用
    iOS之CATextLayer属性简介
    iOS之CAScrollLayer属性简介和使用
    iOS之CAReplicatorLayer属性简介和使用
    iOS之CAGradientLayer属性简介和使用
    iOS之CAShapeLayer属性简介
    iOS之UIBezierPath贝塞尔曲线属性简介
  • 原文地址:https://www.cnblogs.com/luo-c/p/13681817.html
Copyright © 2020-2023  润新知