Example 6.4

The Unsinkable Ship?

Problem:

The USS Unsinkable, which you were lucky (maybe) enough to get a ticket on, has tragically hit an iceberg. Suddenly the ship is going down, and you must find a way off of the ship, before your escape route is blocked. To make matters worse, there aren't enough lifeboats for all of the passengers.

As you make your way through the corridors (moving north, south, east and west), the boat will continue to flood, blocking sections which were previously usable. To safely make it out of the boat, you must locate a path which does not enter any flooded sections. You also must make it to the lifeboats before they are all filled with other passengers and dispatched into the sea (without you!).

Write a program to determine a route out of the ship, reading in the layout and the current flood situation.

General Info:

  • The lifeboats will fill at the rate of one lifeboat per 2 moves. The first lifeboat boat will fill after the second move.
  • All lifeboats are located in the north west corner of the boat.
  • If a section is bordered (either north, west, south or east) by a flooded section, that section will flood after A turns. The first automatically flooded section will occur after move A and before move A+1.
  • Unflooded spaces adjacent to the newly flooded spaces will flood after A more spaces.
  • You may not move into a section that will flood before the next turn unless it is the section with the lifeboat.
  • You may not enter any section more than once.
  • The map of the boat will have at most 20 columns and 20 rows.
  • People move using Manhattan geometry only -- no diagonal moves.

    Input:

    The first line will indicate how many sinking ships will be entered.
    For each sinking ship:
  • the first line of the input will indicate how many lifeboats exist on the sinking ship
  • the second line will indicate how quickly the sinking ship will flood (A)
  • the third line of input will indicate how many rows make up the sinking ship map (M)
  • the next M lines will indicate the layout of the ship and the flooding situation

    The following letters will appear in the layout:

  • O = Open
  • F = Flooded
  • Y = your starting location

    Output:

    This program will first print Sinking Ship #N where N is the input set (start at 1). Starting on the next line, a map showing the path to the lifeboats (located in the north west corner), starting at your initial location (position 0), and ending at the lifeboats. A final diagram, indicating only the moves should be displayed. All sections which are not entered should be marked with an X. Each section should take up 3 spaces in the final diagram. All numbers and letters should be right justified. If no path exists, this should simply output "No Path Exists.". After printing a path or the message, a blank line should appear. After the last set is run a message, "All Sets Run." should appear.

    Example:

    Input:
    2
    5
    3
    3
    OOOOOF
    OOOOFF
    OFFYFF
    1
    1
    3
    OOF
    OFO
    FOY
    

    Output:

    Sinking Ship #1
         5      4      3      2      X      X
         X      X      X      1      X      X
         X      X      X      0      X      X
    
    Sinking Ship #2
    No Path Exists.
    
    All Sets Run.