梯子を探してゲームを...
2981 ワード
上と同じ梯子に登りましょう.
まず,アレイを用いて梯子を実現する.
総高さ7,幅5の配列を簡単に作成しましょう.[高さ](Height)の値は、勾配が複雑な場合ほど大きくなりますが、例では高さを大幅に小さくする必要はありません.
上のはしごをアレイとして実装すると、以下のようになります.
[
[0, 0, 0, 0, 0],
[0, 1, 1, 0, 2],
[0, 0, 0, 2, 0],
[3, 0, 0, 0, 0],
[0, 0, 4, 4, 0],
[0, 3, 0, 0, 0],
[0, 0, 0, 0, 0]
]
便宜上、はしごから下りた幹、横に移動した幹、幹と枝が出会う場所をノードとして表します.配列の最上位の[0,0,0,0,0,0]および最下位の[0,0,0,0]は、開始位置および終了位置を表示するための装置である.
上の勾配配列で0に遭遇した場合は、下に下がります.ゼロ以外の数字に遭遇すると、ある枝に出会って、枝に沿って別の枝から滑り落ちます.勾配の下部に達するまで、この手順を繰り返します.
そして梯子の枝の整数値1.2.3を...と表示されます.はしごに沿って歩いて2行2列のノードに達すると、同じ値の行、列を検索し、2行3列のノードにジャンプします.
各台形の整数値が異なるのは,すべての異なる分岐を区別するためである.
次のコードを使用すると、梯子に移動できます.
def findPathInLadder(starting: int, board: list, desti: list):
position_row = 0
position_col = starting-1
crossing = False # 사다리를 만났을 때 건너가는 중이면 True, 아니면 False
current = board[position_row][position_col]
while position_row < len(board)-1: # 사다리가 끝지점에 도착할 때까지 반복
if current == 0 or (crossing and current != 0): # 만약 현재 위치의 배열값이 0이라면 / 혹은 가지를 건너온 후라면
position_row += 1 # 아래로 내려감
current = board[position_row][position_col] # current값 갱신
crossing = False # 가지를 건너왔으므로 False로 갱신
elif not crossing and current != 0: # 만약 현재 위치의 배열값이 0이 아니고 아직 가지를 건너기 전이라면 == 이제 가지를 건너야 한다면
crossing = True # 기지를 건너야하므로 True로 갱신
for i in range(1, len(board)-1): # 배열의 첫행부터 마지막행을 제외한 나머지 행을 탐색
if position_col == 0: # 만약 제일 왼쪽 열일 경우
if board[i][position_col+1] == current: # 오른쪽 열만 탐색
position_row = i
position_col += 1
current = board[position_row][position_col]
break
elif position_col == len(board[0])-1: # 만약 제일 오른쪽 열일 경우
if board[i][position_col-1] == current: # 왼쪽 열만 탐색
position_row = i
position_col -= 1
current = board[position_row][position_col]
break
elif 0 < position_col < len(board[0])-1: # 중간일 경우, 양쪽 열을 모두 탐색
if board[i][position_col+1] == current:
position_row = i
position_col += 1
current = board[position_row][position_col]
break
elif board[i][position_col-1] == current:
position_row = i
position_col -= 1
current = board[position_row][position_col]
break
if position_row == len(board)-1 :
break
destination = desti[position_col]
if destination == starting:
return True
return False
Reference
この問題について(梯子を探してゲームを...), 我々は、より多くの情報をここで見つけました https://velog.io/@cherish307/사다리게임-사다리찾기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol