首页 > 其他分享 >获取钥匙

获取钥匙

时间:2024-07-22 20:29:36浏览次数:7  
标签:vis int 获取 钥匙 && y1 size

这题目标是通过移动拿到所有钥匙,上锁的房间需要对应的钥匙,思路是通过|和&二进制判断是否有对应钥匙,与普通不同的是,不同点是当我重复进入一个房间时,不能单纯通过有无来过来判断是否continue,而是要通过进入这个房间时钥匙的状况来判断

点击查看代码
			struct node {
				int x, y, w;// 代表在x,y位置时有w个钥匙 
			};
			queue<node> q;
			int d[6] = {-1, 0, 1, 0};
			int d1[6]={0,1,0,-1}// fangxiang
			int vis[200][200][13];
			memset(vis,0,sizeof(0));
			int key = 0;
			int n = a.size(), m = a[0].size();
			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 s = 0;
			while (q.size()) {
				for (int i = 0; i < q.size(); i++) {
					node from= q.front();
					q.pop();
					for (int i = 0; i < 4; i++) {
						int x1 = from.x + d[i];
						int y1 = from.y + d1[i];
						if (x1>=0 && x1 < n &&y1 >= 0 &&y1 < m) {
							char c = a[x1][y1];
							int w1 = from.w;
							if (c == '#') {//撞墙跳过 
								continue;
							}
							if (c >= 'a' && c <= 'f') {//小写是钥匙 ,w1是当前钥匙总数 
								w1 |= (1 << (c - 'a'));
							}
							if (c >= 'A' && c <= 'F') {
								if ((w1 & (1 << (c - 'A'))) == 0) {//大写是锁,&有一出一,1和1碰到就代表当前有需要能开锁的钥匙 
									continue;
								}
							}
							if (w1 == key) {//如果所有的钥匙都有,直接返回当钱层数 
								return s + 1;
							}
							if (!vis[x1][y1][w1]) {//如果没在当前钥匙状态下访问过当前节点,入队 
								vis[x1][y1][w1] = 1;
								q.push({x1, y1, w1});
							}
						}
					}
				}
				s++;//增加层数,如果放for会不知道是哪一层,层数会多; 
			}
			return -1;//无法获得所有钥匙就返回 

标签:vis,int,获取,钥匙,&&,y1,size
From: https://www.cnblogs.com/tzstlove/p/18316834

相关文章

  • 获取所有钥匙的最短路径
    classSolution{public:intshortestPathAllKeys(vector<string>&a){//上右下左structnode{intx,y,w;};constintN=34,K=6;intdirs[5]={-1,0,1,0,-1};boolvis[N]......
  • 使用 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为......
  • Vue3 - 详解实现网站使用企业微信二维码扫描登录,企业微信授权第三方网站接入企业微信
    前言如果您需要Vue2版本,请访问这篇文章。在vue3|nuxt3网站开发中,详解实现网页集成使用“企业微信扫一扫登录”功能,用户使用手机企业微信app扫描网站的登录二维码后,获取用户身份信息及号码并完成授权登录教程,新手小白完整流程及示例运行代码,支持多种企业微信二......
  • 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.......
  • 如何在 Windows 中获取 virtualenv 的路径?
    首先,我在Windows中使用Bash。我正在尝试在VSCode中编写virtualenv的正确路径,但我一定做错了什么。"python.pythonPath":"C\\Users\\Angel\\AppData\\Local\\Packages\\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\\LocalState\\rootfs\\home\......
  • PowerShell 命令来操作 Windows 注册表 Get-ItemProperty 命令可以获取指定注册表路径
    PowerShell提供了一些命令和方法来操作Windows注册表。以下是一些常用的PowerShell命令和示例:1.获取注册表项的值使用Get-ItemProperty命令可以获取指定注册表路径下的键值信息。powershellCopyCode#获取注册表项的值Get-ItemProperty-Path"HKCU:\Software\Micro......