Problem Statement
Joe Freshman, the Stanford student, is trying to find the quickest way to get to his class in the morning. His preferred mode of transportation is a bicycle, but he has to drive around all of the buildings on campus. Given a
The map will be comprised of the following characters:
@ (at sign) represents the starting and ending location of travel
. (period) represents a road he can travel on
X (capital letter X) represents a location he cannot travel on (due to a building, construction, etc.)
If it is impossible for Joe to get from the starting point to the ending point (due to untravelable locations), return -1.
Definition
- Class:
- Bikepath
- Method:
- fastest
- Parameters:
- String[]
- Returns:
- int
- Method signature:
- int fastest(String[] map)
- (be sure your method is public)
Notes
- If it is impossible for Joe to get from the starting point to the ending point (due to untravelable locations), return -1.
Constraints
- map will contain between 5 and 20 elements, inclusive
- each element of map will contain between 5 and 20 elements, inclusive
- each element of map will contain the same number of characters as every other element of map
- each element of map will only contain the characters '@', 'X', or '.'
- the character '@' will appear exactly twice in map
Examples
{"@....", ".....", ".....", ".....", "....@"}
Returns: 8
{"@...X", ".....", "....X", ".....", "....@"}
Returns: 8
Even though some spots are blocked off, the shortest path is still the same as before.
{"@....", "XXXX.", ".....", "....X", "....@"}
Returns: 10
The blocked off locations force Joe to take a longer route than before.
{"@.X..", ".X...", "X.X..", "...X.", "....@"}
Returns: -1
{"@@...", ".....", ".....", ".....", "....."}
Returns: 1
{"@...................", "XXXXXXXXXXXXXXXXXXX.", "....................", ".XXXXXXXXXXXXXXXXXXX", "....................", "XXXXXXXXXXXXXXXXXXX.", "....................", ".XXXXXXXXXXXXXXXXXXX", "....................", "XXXXXXXXXXXXXXXXXXX.", "....................", ".XXXXXXXXXXXXXXXXXXX", "....................", "XXXXXXXXXXXXXXXXXXX.", "....................", ".XXXXXXXXXXXXXXXXXXX", "....................", "XXXXXXXXXXXXXXXXXXX.", "....................", "@XXXXXXXXXXXXXXXXXXX"}
Returns: 209
{".XXXX.X", "X..XX.@", "@......", "...X.X.", ".X..X..", "X......", ".X.XX..", ".X.XXXX", "....X..", "X...X..", "X....XX", "XX....."}
Returns: 7
{".....X.XXXX...XXX.", "XX...X...@..XXX...", ".X...XX.X......XX.", "...XXX...XX....X..", ".X.X.X......XXXX..", "..X..XX...X......X", "X.XXX.XXX......X.X", ".X.X..............", "X.X..X..XX.....XX.", "XX.X.XXXXX..XX.XX.", "......X.X.......X.", "...X.X..XX.X....X.", "X.X.XXXX....X.XXX.", "....XX...X...X.X.X", "..X...XX..X..XXX..", "XX..X...XX.......X", "X.....X.XXXX.....X", "X.XXX.X....X.X....", ".XX...X...@XXX..X.", "...X....XX.X....X."}
Returns: 38
{"X...XX...X...X", "X.XXX.XXXXX.X.", ".XXX@X.X.X....", "....XX..X.X...", "....X.X..XX.X.", "X.X.X..X..X...", "X....X..X.XX..", "...X..XXXX...X", "..X...XX.X....", ".X..X.XXX.X@.X", ".XX...X....X.."}
Returns: -1
{".X.....XX.X.X.X...X.", "X....XXXX.X....XXX..", "....XXX......XXX.X..", ".XX.XX....X@XX.....X", "..XX....X.XXXXXXX...", ".X...X.XX..X.X...X..", "..X...X.XX...XX.....", ".....X...X....X....X", ".....X....X.X.X..X..", "....X.XX..X.XX....XX", ".XX.X.X.....XX.X.X..", ".@X.....X....XX..X..", ".XX..X...X..........", "..X..X.....X......X.", "XXXXX.XX..XX..X..XX.", "..XX...XXXX.X......X"}
Returns: 22
{"X...XXXXXX...X@...X.", "X..X....XX.....X.XXX", "X....X....X.....X...", "XX@...XX.....X.X.XXX", "..X...X........XXXXX", ".X...X..XX..X.......", "XXX.X.X.............", "XX.......XXXX..X.X..", "......XX.X....X.X...", ".X..X...X.XXX.XX...."}
Returns: 19
{"@....XX.....X..X...X", "XX.X.X.X..X..X..XXXX", ".X..XXX..X..X.X.X..X", "XX......X....XX....X", "X....X..X.....XXX.XX", ".X.XX..........X.X.X", ".X....XX.....X..X...", "XX..XX..XX..X.X....X", ".....X..XX.XX....X.X", "..XX..XX....X....XX.", "..X.XX.X......X...XX", "X.XX......X......X..", "....X...XX..XXX..X..", ".XX...X.XX.XX...XX..", "..XX.X...XX..XX.....", ".X.......X.XXXXXX..X", "X......X.X.......X..", "X.......XX.X.X......", "...X.X..X....XX.....", "XX..X...X.......X..@"}
Returns: 38
{"@...XX..XX.X..X.XX..", ".X.XX.XXXXX..X.X....", ".XX.X.XXX.........X.", "..X.X...XX.XX.XX.XX.", ".X.X...X...XX.....X.", "....XXXX...X....X...", "XXXX.X.XX.....X.XXX.", "X..X.......X.X.XXX.X", "..XX..X.X..X.....XXX", "..X..X.XXX.....X.X..", "....X.XXX..X...XX.XX", "..X.XXX.XX...XX.....", "XXX..XX.X.X.X....X.X", "X..X..X.X..X....X...", ".X.X...X.XX.....X..X", "..XX......XX........", ".X.....X..X.X.X.XX..", "XXX.XX..X....XXX....", ".X...X....X.X.X.....", "XXXXX..XXX.X....X.X@"}
Returns: -1
{"@.X.X..X..X.X.XXX...", "...X...X...X...X..X.", "..XX....X.XX..X.X.X.", "...X.X.X.X.....X....", "XX..XXX.X...X...X.X.", ".....XX.XXX.XX......", ".X...X.XX..X....X...", "X...XX.XXX.X...XXXXX", "..X..XX....X........", ".X...XX..X..X...X.X.", "..X.....XX...XX..X.X", "X.X..X...X...XXX..X.", ".......XX.XX.X..X.X.", "X..X.X.X............", "X..X.XX.XX.X....XXX.", "XXXXX....XX.....XX..", ".XXXX...X..X..X.....", "...X......X..X..XX..", ".X...XX.X.XX..XX.X.X", "X.....XXXX.X.X.....@"}
Returns: 42
{"@.X.XX..XX..XX.X..X.", "X.XXX.X...XX...X.X..", "........X..XX..X.XXX", ".X.X..XXX....XX...XX", "............XXX..X..", "X..XXX...XX........X", "X.X......X.X..X...X.", "X.X.X..XX.X..XX...X.", "..XX..XX...........X", "..XX.X..X.XX...X..X.", "XX.X..X...XX.X....X.", "XX....X...X..XX..XX.", "X........X.....X.X..", "XX.X.XXX......XXX.X.", ".X.....XX..XXX.XX.XX", "X.X..X....X...XX.X..", "....X.X.XX.....XX.X.", "XXX.XXX....X.XXXX.XX", "X..XXXX..XX..X.....X", "....X....X.....X...@"}
Returns: 46
{ "@....", "XXXX.", ".....", "....X", "....@" }
Returns: 10
{ "@....", "XXXX.", ".....", ".....", "....@" }
Returns: 8
{ "@...................", "XXX.XXXX.XXXXX.XXXX.", "...X...X.X....X...X.", ".X.X.X.X.X..X.X.X.X.", ".X...X...X..X...X...", ".XXXX.XXXX.XXXX.XXXX", ".X...X...X..X...X...", ".X.X.X.X.X..X.X.X.X.", "...X...X.X....X...X.", "XXXXXXXX.XXXXXX.XXX.", "...X...X.X....X...X.", ".X.X.X.X.X..X.X.X.X.", ".X...X...X..X...X...", ".XXXXXXXXX.XXXX.XXXX", ".X...X...X..X...X...", ".X.X.X.X.X..X.X.X.X.", "...X...X.X....X...X.", "XXXXXXXX.XXXXXX.XXX.", "...X...X.XX...X...X.", ".X...X...X@.X...X..." }
Returns: 53
{ "@....", ".....", ".....", ".....", "....@" }
Returns: 8
{ ".....", ".....", "....@", "...@.", ".....", "....." }
Returns: 2
{ ".....", ".@X..", ".X...", ".....", "....@" }
Returns: 8