Sally is a very bad skater, so she can only skate in one direction! But Sally still wants to find her dad in the least amount of moves possible so that she can get off the ice. Sally's only way of stopping is (crashing into) walls or the edge of the ice rink.
We describe the ice rink using the following notation:
(#) -- Wall
(.) -- Free space
(S) -- Sally's starting position
(D) -- Dad's position.
For example, in the ice rink at right, the shortest path is 18 steps.
Here is a text file of 5 ice rinks of size 2 0 × 2 0 . The rinks are separated by hyphens.
Find the sum of the shortest paths of these five 2 0 × 2 0 ice rinks.
Note: Sally has to stop at her father's position. She will slide past him if there are no walls.
This section requires Javascript.
You are seeing this because something didn't load right. We suggest you, (a) try
refreshing the page, (b) enabling javascript if it is disabled on your browser and,
finally, (c)
loading the
non-javascript version of this page
. We're sorry about the hassle.
This problem can be solved using dijkstra algorithm and my solution implements algorithm from this book and this code is written in C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
|
The output would be:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 |
|
Total = 2 3 2
Thanks Resha. Some comments regarding to your code in C++:
*_isnotOutofBond
functions you can return the condition directly (eg:
return pos<X_SIZE && pos>=0
)
Thank you for the feedback
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|
Yes, this method implements Dijkstra's shortest path algorithm, for this particular context. I do not store a graph with explicit path lengths; doing so would increase performance slightly, but would also require more overhead and more code.
Here is solution in python 3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
|
Result:
1 2 |
|
Problem Loading...
Note Loading...
Set Loading...
Sally's Journey can be modeled as a weighted directed graph,where the walls and the edges of the rink are nodes of the graph and the edges are the distances between two nodes.Basically a weighted graph is a graph that associates a label (weight) with every edge in the graph. For example the graph of the given example above(the 1 0 × 1 0 grid in the problem description) is the following graph graph .
Finding the shortest possible path in a weighted graph can be done with Dijkstra's algorithm (a more generalized version of A* search). It picks the unvisited node with the lowest-distance, calculates the distance through it to each unvisited neighbor, and updates the neighbor's distance if smaller. Mark visited (set to red) when done with neighbors. Dijkstra's algorithm
Thank's to Chandler's solution here . I learned about an awesome tool named networkx for managing graphs in python.
Here is the code in python: