前提・実現したいこと
ABC 007のC問題でBFSについて勉強していたのですが、その途中ででたエラーの原因がわかりません。
問題は以下の通りで、地図とスタートとゴール地点が与えられて最短経路の手数を出力するものです。
1行目には、行数 R(1≦R≦50)と列数 C(1≦C≦50)がそれぞれ空白区切りで与えられる。
2行目には、スタート地点の座標 (sy,sx) が空白区切りで与えられる。スタート地点が sy 行 sx列にあることを意味する。 1≦sy≦R かつ 1≦sx≦C である。
3行目には、ゴール地点の座標 (gy,gx) が空白区切りで与えられる。ゴール地点が gy 行 gx 列にあることを意味する。 1≦gy≦R かつ 1≦gx≦C であり、(gy,gx)!=(sy,sx)であることが保障されている。
4行目から R 行、長さ C の文字列が 1 行ずつ与えられる。各文字は . もしくは # のいずれかあり、i 回目 (1≦i≦R) に与えられられる文字列のうち j 文字目 (1≦j≦C) について、その文字が . なら、マス (i,j) が空きマスであり、# なら、マス (i,j)
が壁マスであることをあらわす。
盤面は壁マスで囲まれている。つまり、i=1,i=R,j=1,j=C のうちいずれか1つでも条件を満たすマス (i,j) について、c(i,j) は #である。また、スタート地点とゴール地点は必ず空きマスであり、スタート地点からゴール地点へは、空きマスを辿って必ずたどり着ける。
発生している問題・エラーメッセージ
出力すると正答が11のところ0となります。 以下のコードでprint(count)とすると、すべて0の二重リストが出力されました。
該当のソースコード
python3
1import queue 2r,c = map(int,input().split()) 3sy,sx = map(int,input().split()) 4gy,gx = map(int,input().split()) 5 6city = [list(input()) for i in range(r)] 7count = [[0]*c for i in range(r)] 8que = queue.Queue() 9dy = [0,1,0,-1] 10dx = [1,0,-1,0] 11 12def course(y,x): 13 que.put([y,x]) 14 p = que.get() 15 if p[0] == gy-1 and p[1] == gx-1: 16 exit() 17 while not que.empty(): 18 for i in range(4): 19 ny = p[0] + dy[i] 20 nx = p[1] + dx[i] 21 if 0 < ny < r and 0 < nx < c and city[ny][nx] == "." and count[ny][nx] == 0: 22 que.put([ny,nx]) 23 count[ny][nx] = count[p[0]][p[1]]+1 24 return count[gx-1][gy-1] 25print(course(sy-1,sx-1))
試したこと
他の方のコードを参考にしたり自分のコードをよく読んだりしましたがなぜ0となるのかがわかりません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/03 14:41