zy一天卷一题[26]
今天做了一道困难题,864访问所有钥匙的最短路径。题目见图一,图二,看到这题很容易联想到前段时间做的访问所有节点的最短路径。
很显然我们会想到同样的思路去做状态压缩,且更容易。
对于最短路径,自然而然的就会想到广度优先搜索。由于涉及到拿钥匙的状态改变,于是我们需要维护的已访问列表中,将会有已经拿到的钥匙的个数这一信息。
我们需要解决如下几个问题:
1.确定有几把钥匙要找,起点位置。
2.终止条件。
3.对于每个状态,他的下一个可行状态的各种处理方法。
4.如何状态压缩。
1.钥匙最多6把,最少1把,初始化为1把,遍历列表,找到最大的字母,确定钥匙个数。同时标记’@‘的位置为起点。
2.4.一起回答,我们维护一个二进制数来代表已找到的钥匙数,通过将1在二进制中左移i位,代表找到了第i把钥匙。比如找到了第三把(实际上是第四把,i从0开始)钥匙,那么状态就是1000。如果此前的状态为1,那么通过1 | 1000操作(二进制的并运算),就可以把所有的1合并,得到1001.终止条件自然就是找到所有钥匙,比如总共有六把,那么状态应当是111111,这个数在十进制中也就是2^6-1=31,也可以写成1<<6-1.
3.对于每个点,对于他相邻的四个点,如果相邻点在可行域内且相邻点没有在同样状态下访问过(拥有同样的钥匙得时候不可能需要再次回头),该点有几种可能:
1)'#‘,墙,不管了
2)大写字母,其中也分是否有钥匙和没钥匙,通过mask & 1<3)小写字母,因为是没有在该状态下访问过的,所以没遇到一把钥匙都是第一次遇到它,通过上述并操作,更新状态,并加入队列维护已访问。
4)空格或者起点,直接加入并标记.
所以可以概括为墙或者没钥匙的锁,不管直接下个点,跳过后续操作;新钥匙,更新状态;加入列表,标记为已访问。
代码见图三。
我看评论区基本都是我这个思路,标答反而有点暴力了,另外一个关键点 + Dijkstra方法懒得看了。
今天做了一道困难题,864访问所有钥匙的最短路径。题目见图一,图二,看到这题很容易联想到前段时间做的访问所有节点的最短路径。
很显然我们会想到同样的思路去做状态压缩,且更容易。
对于最短路径,自然而然的就会想到广度优先搜索。由于涉及到拿钥匙的状态改变,于是我们需要维护的已访问列表中,将会有已经拿到的钥匙的个数这一信息。
我们需要解决如下几个问题:
1.确定有几把钥匙要找,起点位置。
2.终止条件。
3.对于每个状态,他的下一个可行状态的各种处理方法。
4.如何状态压缩。
1.钥匙最多6把,最少1把,初始化为1把,遍历列表,找到最大的字母,确定钥匙个数。同时标记’@‘的位置为起点。
2.4.一起回答,我们维护一个二进制数来代表已找到的钥匙数,通过将1在二进制中左移i位,代表找到了第i把钥匙。比如找到了第三把(实际上是第四把,i从0开始)钥匙,那么状态就是1000。如果此前的状态为1,那么通过1 | 1000操作(二进制的并运算),就可以把所有的1合并,得到1001.终止条件自然就是找到所有钥匙,比如总共有六把,那么状态应当是111111,这个数在十进制中也就是2^6-1=31,也可以写成1<<6-1.
3.对于每个点,对于他相邻的四个点,如果相邻点在可行域内且相邻点没有在同样状态下访问过(拥有同样的钥匙得时候不可能需要再次回头),该点有几种可能:
1)'#‘,墙,不管了
2)大写字母,其中也分是否有钥匙和没钥匙,通过mask & 1<3)小写字母,因为是没有在该状态下访问过的,所以没遇到一把钥匙都是第一次遇到它,通过上述并操作,更新状态,并加入队列维护已访问。
4)空格或者起点,直接加入并标记.
所以可以概括为墙或者没钥匙的锁,不管直接下个点,跳过后续操作;新钥匙,更新状态;加入列表,标记为已访问。
代码见图三。
我看评论区基本都是我这个思路,标答反而有点暴力了,另外一个关键点 + Dijkstra方法懒得看了。
#BIT[超话]# 去各大社区粘贴复制起来啊
天天刷自己超话刷表情干啥
其他社区一天去评论10次 积少成多
总会厚积薄发 总会越来越好
biconomy 平台代币 BIT 发行1万亿枚 已销毁2300亿枚 目前距上次最高价 下跌20倍 所以不存在叫人抬轿子 目前已经跌不下去了 持有交易所代币季度分usdt。 已经分过一次了,交易所兑现承诺了。 现邀请 盘古社区加入,为以后社区代币上交易所铺路。 0xc864019047b864b6ab609a968ae2725dfaee808a
天天刷自己超话刷表情干啥
其他社区一天去评论10次 积少成多
总会厚积薄发 总会越来越好
biconomy 平台代币 BIT 发行1万亿枚 已销毁2300亿枚 目前距上次最高价 下跌20倍 所以不存在叫人抬轿子 目前已经跌不下去了 持有交易所代币季度分usdt。 已经分过一次了,交易所兑现承诺了。 现邀请 盘古社区加入,为以后社区代币上交易所铺路。 0xc864019047b864b6ab609a968ae2725dfaee808a
#今日运动# 搏击1h,消耗864千卡,金丽热巴今天出片太好看了,她笑起来可真美,拳也打的很好,被我的教练强行确立为我打拳目标,我比她多上的四五十节课算是白上了。
水瓶座真是虚荣怪诶,收礼物好开心啊,因为像我一样的太阳花,厘不开我的爱心水果盒,超对我喜好的香气,提前半个月就收到的眼影…
是自己想过的生日,普普通通又有点儿不一样的一天,平凡中有小惊喜和大温情,在乎的人在,暖呼呼的
新一岁没啥特别的愿望,每一天都很好,对自己很满意[心][心]
水瓶座真是虚荣怪诶,收礼物好开心啊,因为像我一样的太阳花,厘不开我的爱心水果盒,超对我喜好的香气,提前半个月就收到的眼影…
是自己想过的生日,普普通通又有点儿不一样的一天,平凡中有小惊喜和大温情,在乎的人在,暖呼呼的
新一岁没啥特别的愿望,每一天都很好,对自己很满意[心][心]
✋热门推荐