TopCoder problem "ShortPath" used in TCCC '04 Semifinals 3 (Division I Level Three)



Problem Statement

    Given a starting point and a finishing point on a square grid, along with some grid points that are forbidden, determine the length of the shortest path from start to finish. In one step you may move one unit horizontally, vertically, or diagonally (but not onto a forbidden point).

Create a class ShortPath with a method steps that is given int[] x and int[] y as input. Corresponding elements of x and y give the coordinates of a point. The first elements of x and y give the start, the second elements give the finish, and additional corresponding pairs of elements from x and y specify forbidden points. Your method should return the minimum number of steps required to go from start to finish, or -1 if it is not possible to go from start to finish.

 

Definition

    
Class:ShortPath
Method:steps
Parameters:int[], int[]
Returns:int
Method signature:int steps(int[] x, int[] y)
(be sure your method is public)
    
 

Constraints

-x will have between 2 and 50 elements inclusive.
-y will have the same number of elements as x.
-Each element of x will be between -1,000,000,000 and 1,000,000,000 inclusive.
-Each element of y will be between -1,000,000,000 and 1,000,000,000 inclusive.
-The start and finish points will be distinct from each other and from all other points given by x and y.
 

Examples

0)
    
{0,2,1}
{0,2,1}
Returns: 3
   3  --|--|--|--|--|--|--
   2  --|--|--F--|--|--|--
   1  --|--X--|--|--|--|--
   0  --S--|--|--|--|--|--
        0  1  2  3  4  5
In the diagram, S is the start point, F is the finish, and X is forbidden. There are two different paths of length 3, one of which is S to (0,1) to (1,2) to F. The direct path of length 2 is blocked by the forbidden point.
1)
    
{0,1,2,2}
{0,1,2,2}
Returns: 1
Take a single diagonal step from (0,0) to (1,1). The second appearance of (2,2) on the forbidden list is legal but never matters.
2)
    
{1,100000,0,0,0,2,2,2,1,1}
{1,200000,0,1,2,0,1,2,0,2}
Returns: -1
The start point is trapped in a square of forbidden points.
3)
    
{1,100000,0,0,0,2,2,2,1}
{1,200000,0,1,2,0,1,2,0}
Returns: 199999

Problem url:

http://www.topcoder.com/stat?c=problem_statement&pm=2007

Problem stats url:

http://www.topcoder.com/tc?module=ProblemDetail&rd=5078&pm=2007

Writer:

dgoodman

Testers:

lbackstrom , brett1479 , vorthys

Problem categories:

Graph Theory