• Open the Lock


    2018-07-15 10:33:46

    问题描述:

    问题求解:

    其实是一个解空间遍历的问题,每个节点可以扩展8条边,由此问题变成了图中的最短路径问题,由于本题中路径长度为1,所以最高效的解法就是使用BFS进行层次遍历。

    想到使用图来做其实问题已经就解决的一大半,剩下的基本就是宽搜的模板了。

        public int openLock(String[] deadends, String target) {
            Queue<String> queue = new LinkedList<>();
            HashSet<String> set = new HashSet<String>(Arrays.asList(deadends));
            queue.add("0000");
            int step = -1;
            while (!queue.isEmpty()) {
                int size = queue.size(); 
                step++;
                for (int i = 0; i < size; i++) {
                    String cur = queue.poll();
                    if (set.contains(cur)) continue;
                    if (cur.compareTo(target) == 0) return step;
                    set.add(cur);
                    for (int j = 0; j < 4; j++) {
                        for (int k = -1; k < 2; k += 2) {
                            char[] temp = cur.toCharArray();
                            temp[j] = (char)((temp[j] - '0' + k + 10) % 10 + '0');
                            queue.add(new String(temp));
                        }
                    }
                }
            }
            return -1;
        }
    
  • 相关阅读:
    Orleans介绍
    Orleans入门
    mongodb for windows安装
    ASP.NET Identity
    OWIN与Katana
    手动搭建ABP2.1.3 Zero——基础框架
    ABP学习笔记
    ABP-Zero模块
    ABP单元测试
    ABP-JavaScript API
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/9312134.html
Copyright © 2020-2023  润新知