teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

誤字

2021/07/12 08:15

投稿

kay_ventris4
kay_ventris4

スコア269

answer CHANGED
@@ -87,7 +87,8 @@
87
87
  maze[x][y + 1] = 2
88
88
  ```
89
89
 
90
+ 解法③
90
- 解法③```Python
91
+ ```Python
91
92
  from collections import deque
92
93
 
93
94
  R, C = map(int, input().split())

1

修正

2021/07/12 08:15

投稿

kay_ventris4
kay_ventris4

スコア269

answer CHANGED
@@ -1,5 +1,6 @@
1
- メモ化の要領でノード辞書で管理し、訪れたことがなところみ探索する手法取ったところ、実行時間は最長2226ms → 86msまで改善しました
1
+ 解答たお二方アプローチそれぞれ以下に示ておき
2
2
 
3
+ 解法①
3
4
  ```Python
4
5
  from collections import deque
5
6
 
@@ -45,4 +46,82 @@
45
46
  if dic[x, y + 1] < 1:
46
47
  data.append([x, y + 1, d + 1])
47
48
  dic[x, y + 1] += 1
49
+ ```
50
+
51
+ 解法②
52
+ ```Python
53
+ from collections import deque
54
+
55
+ R, C = map(int, input().split())
56
+ sy, sx = map(int, input().split())
57
+ gy, gx = map(int, input().split())
58
+
59
+ maze = []
60
+ for _ in range(R):
61
+ li = list(str(input()))
62
+ li = [9 if el == '#' else 0 for el in li]
63
+ maze.append(li)
64
+
65
+ maze[sy - 1][sx - 1] = 2
66
+ maze[gy - 1][gx - 1] = 1
67
+
68
+ data = deque([[sy - 1, sx - 1, 0]])
69
+ while data[0]:
70
+ x, y, d = data.popleft()
71
+
72
+ if x == gy - 1 and y == gx - 1:
73
+ print(d)
74
+ break
75
+
76
+ if maze[x - 1][y] < 2:
77
+ data.append([x - 1, y, d + 1])
78
+ maze[x - 1][y] = 2
79
+ if maze[x + 1][y] < 2:
80
+ data.append([x + 1, y, d + 1])
81
+ maze[x + 1][y] = 2
82
+ if maze[x][y - 1] < 2:
83
+ data.append([x, y - 1, d + 1])
84
+ maze[x][y - 1] = 2
85
+ if maze[x][y + 1] < 2:
86
+ data.append([x, y + 1, d + 1])
87
+ maze[x][y + 1] = 2
88
+ ```
89
+
90
+ 解法③```Python
91
+ from collections import deque
92
+
93
+ R, C = map(int, input().split())
94
+ sy, sx = map(int, input().split())
95
+ gy, gx = map(int, input().split())
96
+
97
+ maze = []
98
+ for _ in range(R):
99
+ li = list(str(input()))
100
+ li = [9 if el == '#' else 0 for el in li]
101
+ maze.append(li)
102
+
103
+ maze[gy - 1][gx - 1] = 1
104
+
105
+ data = deque([[sy - 1, sx - 1, 0]])
106
+ while data[0]:
107
+ x, y, d = data.popleft()
108
+
109
+ if maze[x][y] == 1:
110
+ print(d)
111
+ exit()
112
+
113
+ if maze[x][y] >= 2:
114
+ continue
115
+
116
+ maze[x][y] = 2
117
+
118
+ if maze[x - 1][y] < 2:
119
+ data.append([x - 1, y, d + 1])
120
+ if maze[x + 1][y] < 2:
121
+ data.append([x + 1, y, d + 1])
122
+ if maze[x][y - 1] < 2:
123
+ data.append([x, y - 1, d + 1])
124
+ if maze[x][y + 1] < 2:
125
+ data.append([x, y + 1, d + 1])
126
+
48
127
  ```