解答を頂いたお二方のアプローチをそれぞれ以下に示しておきます:
解法①
Python
1from collections import deque
2
3R, C = map(int, input().split())
4sy, sx = map(int, input().split())
5gy, gx = map(int, input().split())
6
7maze = []
8for _ in range(R):
9 li = list(str(input()))
10 li = [9 if el == '#' else 0 for el in li]
11 maze.append(li)
12
13maze[gy - 1][gx - 1] = 1
14
15dic = {}
16for i in range(R - 1):
17 for j in range(C - 1):
18 dic[i, j] = 0
19
20data = deque([[sy - 1, sx - 1, 0]])
21while data[0]:
22 x, y, d = data.popleft()
23
24 if maze[x][y] == 1:
25 print(d)
26 break
27 maze[x][y] = 2
28
29 if maze[x - 1][y] < 2:
30 if dic[x - 1, y] < 1:
31 data.append([x - 1, y, d + 1])
32 dic[x - 1, y] += 1
33 if maze[x + 1][y] < 2:
34 if dic[x + 1, y] < 1:
35 data.append([x + 1, y, d + 1])
36 dic[x + 1, y] += 1
37 if maze[x][y - 1] < 2:
38 if dic[x, y - 1] < 1:
39 data.append([x, y - 1, d + 1])
40 dic[x, y - 1] += 1
41 if maze[x][y + 1] < 2:
42 if dic[x, y + 1] < 1:
43 data.append([x, y + 1, d + 1])
44 dic[x, y + 1] += 1
解法②
Python
1from collections import deque
2
3R, C = map(int, input().split())
4sy, sx = map(int, input().split())
5gy, gx = map(int, input().split())
6
7maze = []
8for _ in range(R):
9 li = list(str(input()))
10 li = [9 if el == '#' else 0 for el in li]
11 maze.append(li)
12
13maze[sy - 1][sx - 1] = 2
14maze[gy - 1][gx - 1] = 1
15
16data = deque([[sy - 1, sx - 1, 0]])
17while data[0]:
18 x, y, d = data.popleft()
19
20 if x == gy - 1 and y == gx - 1:
21 print(d)
22 break
23
24 if maze[x - 1][y] < 2:
25 data.append([x - 1, y, d + 1])
26 maze[x - 1][y] = 2
27 if maze[x + 1][y] < 2:
28 data.append([x + 1, y, d + 1])
29 maze[x + 1][y] = 2
30 if maze[x][y - 1] < 2:
31 data.append([x, y - 1, d + 1])
32 maze[x][y - 1] = 2
33 if maze[x][y + 1] < 2:
34 data.append([x, y + 1, d + 1])
35 maze[x][y + 1] = 2
解法③
Python
1from collections import deque
2
3R, C = map(int, input().split())
4sy, sx = map(int, input().split())
5gy, gx = map(int, input().split())
6
7maze = []
8for _ in range(R):
9 li = list(str(input()))
10 li = [9 if el == '#' else 0 for el in li]
11 maze.append(li)
12
13maze[gy - 1][gx - 1] = 1
14
15data = deque([[sy - 1, sx - 1, 0]])
16while data[0]:
17 x, y, d = data.popleft()
18
19 if maze[x][y] == 1:
20 print(d)
21 exit()
22
23 if maze[x][y] >= 2:
24 continue
25
26 maze[x][y] = 2
27
28 if maze[x - 1][y] < 2:
29 data.append([x - 1, y, d + 1])
30 if maze[x + 1][y] < 2:
31 data.append([x + 1, y, d + 1])
32 if maze[x][y - 1] < 2:
33 data.append([x, y - 1, d + 1])
34 if maze[x][y + 1] < 2:
35 data.append([x, y + 1, d + 1])
36
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/12 05:19
2021/07/12 05:23
2021/07/12 05:36
2021/07/12 05:44
2021/07/12 05:46
2021/07/12 05:50
2021/07/12 07:13
2021/07/12 08:08
2021/07/12 08:12