[伯俊/python/1194]月が昇ってきたから行こう
質問リンク:月が昇ったから行こう
長い議論から問題の物語を初めて読んだとき、私は理解しなかった.よく見ると迷宮問題です.他の問題とは異なり、アルファベットキーを使用できます.
import sys
from collections import deque
input=sys.stdin.readline
n,m=map(int, input().split())
dx=[0,0,-1,1]
dy=[1,-1,0,0]
def bfs():
while q:
x,y,c,cnt=q.popleft()
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if 0<=nx<n and 0<=ny<m and miro[nx][ny]!="#" and visit[nx][ny][c]==0:
if miro[nx][ny]==".":
visit[nx][ny][c]=1
q.append([nx,ny,c,cnt+1])
elif miro[nx][ny]=="1":
return cnt+1
else:
if miro[nx][ny].isupper():
if c&1<<(ord(miro[nx][ny])-65):
visit[nx][ny][c]=1
q.append([nx,ny,c,cnt+1])
elif miro[nx][ny].islower():
nc=c|(1<<ord(miro[nx][ny])-97)
if visit[nx][ny][nc]==0:
visit[nx][ny][nc]=1
q.append([nx,ny,nc,cnt+1])
return -1
q=deque()
miro = []
visit=[[[0]*64 for i in range(m)]for i in range(n)]
for i in range(n):
a=list(input().strip())
miro.append(a)
for j in range(m):
if a[j]=="0":
q.append([i,j,0,0])
miro[i][j]="."
visit[i][j][0]=1
print(bfs())
身長を見分ける過程が難しすぎる.だから他の人のブログを参考にしました.こちらはバイナリで表しています.
1<<(「A」)-65)の場合は1->1
1<<(「B」)-65)の場合2>10
1<<(「C」)-65)の場合は4->100
そうです.小文字も同じです.
&これらの進数をand演算するので、複数の鍵を拾うと結合します.
A、B、Dキーがある場合は->1011
|これらの整数をorで演算するため、鍵を使用します.
1011でbを使用する場合->1001
うん.狩猟するすべて
Reference
この問題について([伯俊/python/1194]月が昇ってきたから行こう), 我々は、より多くの情報をここで見つけました https://velog.io/@i_am_developer/백준python1194달이-차오른다가자テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol