首页 > 其他分享 >获取所有钥匙的最短路径

获取所有钥匙的最短路径

时间:2024-07-22 19:29:01浏览次数:9  
标签:&& int 路径 ++ 获取 钥匙 dx dy

class Solution {
public:
    int shortestPathAllKeys(vector<string>& a) {
        // 上 右 下 左
        struct node {
            int x, y, w;
        };
        const int N = 34, K = 6;
        int dirs[5] = {-1, 0, 1, 0, -1}; 
        bool vis[N][N][1 << K] = {0};
        int key = 0, n = a.size(), m = a[0].size(); 
        queue <node> q;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (a[i][j] == '@') {
                    q.push({i, j, 0});
                }
                if (a[i][j] >= 'a' && a[i][j] <= 'f') {
                    key |= 1 << (a[i][j] - 'a');
                }
            }
        } 
        int lever = 0;
        while (!q.empty()) {
            int size = q.size();
            for (int i = 0; i < size; i++) {
                auto [x, y, w] = q.front(); 
                q.pop(); 
                for (int d = 0; d < 4; d++) {
                    int dx = x + dirs[d];
                    int dy = y + dirs[d + 1]; 
                    if (dx < 0 || dx >= n || dy < 0 || dy >= m || a[dx][dy] == '#') {
                        continue; 
                    }  
                    int ds = w;  
                    if (a[dx][dy] >= 'A' && a[dx][dy] <= 'F') {
                        if ((ds & (1 << (a[dx][dy] - 'A'))) == 0) {
                            continue; 
                        }
                    } 
                    if (a[dx][dy] >= 'a' && a[dx][dy] <= 'f') {
                        ds |= (1 << (a[dx][dy] - 'a'));
                    } 
                    if (ds == key) {
                        return lever + 1;
                    } 
                    if (!vis[dx][dy][ds]) {
                        vis[dx][dy][ds] = 1;
                        q.push({dx, dy, ds});
                    }
                }
            }
            lever++; 
        }
        return -1;
    }
};

  

标签:&&,int,路径,++,获取,钥匙,dx,dy
From: https://www.cnblogs.com/youhualiuh/p/18316739

相关文章

  • 使用 useNuxtData 进行高效的数据获取与管理
    title:使用useNuxtData进行高效的数据获取与管理date:2024/7/22updated:2024/7/22author:cmdragonexcerpt:深入讲解了Nuxt3中useNuxtData组合函数的应用,演示了如何通过此函数访问缓存数据,实现组件间数据共享,以及如何在数据更新时利用缓存提高用户体验。文章提供了......
  • eyoucms获取当前栏目分类的下级栏目的文档列表
    [基础用法]标签:modelsartlist(channelartlist)备注:使用channelartlist也可以正常输出描述:获取当前栏目分类的下级栏目的文档列表用法:{eyou:modelsartlisttypeid='栏目ID'type='son'loop='20'}<ahref='{eyou:fieldname='typeurl'/}'>{eyou:f......
  • 关于token获取遇到的问题
    问题描述最近在做一个项目的登录的时候,发现了登录不上的问题。这个系统是从主系统(例如:www.abc.com)中登录,然后跳转到子系统中(例如:www.abc.com/d/e),主系统可以正常登录,但是在跳转子系统的过程中会遇到token失效的问题,总是进不去。问题研究最后发现,主系统登录后,token存储在path为......
  • 代码随想录算法训练营第36天 | 动态规划基础2:62.不同路径、63.不同路径 II
    62.不同路径https://leetcode.cn/problems/unique-paths/submissions/548656029/代码随想录https://programmercarl.com/0062.不同路径.html63.不同路径IIhttps://leetcode.cn/problems/unique-paths-ii/description/代码随想录https://programmercarl.com/0063.不同路径......
  • Vue3 - 详解实现网站使用企业微信二维码扫描登录,企业微信授权第三方网站接入企业微信
    前言如果您需要Vue2版本,请访问这篇文章。在vue3|nuxt3网站开发中,详解实现网页集成使用“企业微信扫一扫登录”功能,用户使用手机企业微信app扫描网站的登录二维码后,获取用户身份信息及号码并完成授权登录教程,新手小白完整流程及示例运行代码,支持多种企业微信二......
  • 欧拉图、欧拉路径、欧拉回路
    P7771【模板】欧拉路径欧拉路径的模板题。思路首先判断是否有欧拉路径,然后排序,找出起点,最后dfs找路径。代码细节多,比如要判断一个点是否存在(这个题目不需要)。#include<bits/stdc++.h>usingnamespacestd;constintN=100010;vector<int>e[N];inthead[N],in......
  • Flask 无法获取中文参数
    我已经在docker中从nvidia/cuda:12.5.1-cudnn-runtime-ubuntu22.04构建了一个Flask应用程序。但是这个flask无法接收任何utf-8请求,并出现Badrequestsyntax错误。#herethemessycodeä½\xa0好is你好inChinese,whichmeanshello......
  • unity3d Dictionary 根据key获取value
    unity3d Dictionary 根据key获取value  usingSystem;usingSystem.Collections.Generic;usingUnityEngine;publicclassDictionaryExample:MonoBehaviour{privateDictionary<string,int>myDictionary;voidStart(){//初始化......
  • Elastic Search基于Spring Boot实现复杂查询和对复杂查询结果的映射银行账户对象并获
    packagecom.alatus.search;importcom.alatus.search.config.MallElasticSearchConfig;importcom.alibaba.fastjson.JSON;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;importlombok.ToString;importorg.elasticsearch.......
  • Loj P10064 黑暗城堡 题解 最短路径树记数
    这道题是一道最短路径树问题。首先,什么是最短路径树呢?定义一个图的最短路径树表示一个图上的生成树,且根节点到图上任一点的距离等于原图上两者之间的距离。而不难发现,题目其实是在求图上最短路径树记数。首先,建出最短路径树。枚举每条边,判断边两个端点到根的距离之差是否为......