Problem Statement
Today is a holiday. John decided to go to the city and visit all the houses. However, some of the houses are locked since the owners left the city for the holiday. You are given a
John's trip has to satisfy the following constraints:
- He has to visit each open house exactly once.
- He cannot visit the locked houses and he cannot leave and re-enter the city during the trip.
- His trip has to start somewhere on the border of the city. In other words, the first house he visits must have x = 0 or x = n-1 or y = 0 or y = m-1.
- His trip also has to end somewhere on the border of the city.
- From any house John may only move to an adjacent house. Two houses are adjacent if they are next to each other in the same row or column. Formally, (x1, y1) and (x2, y2) are adjacent if |x1 - x2| + |y1 - y2| = 1.
Definition
- Class:
- TheRectangularCityDiv1
- Method:
- find
- Parameters:
- String[]
- Returns:
- long
- Method signature:
- long find(String[] city)
- (be sure your method is public)
Notes
- You may assume that for any valid input the correct return value fits into a long.
Constraints
- n will be between 1 and 100, inclusive.
- m will be between 1 and 100, inclusive.
- n*m will be between 1 and 100, inclusive.
- city will contain exactly n elements.
- Each element of city will consist of exactly m characters, each being either '.' or '#'.
- At least one character in city will be '.'.
Examples
{ "....", ".##.", "...." }
Returns: 20
All houses on the city border have to be visited. John can start from any of them and choose the direction of travel: either clockwise or counterclockwise. Thus the total number of ways to visit all open houses is 10 * 2 = 20;
{ "....", ".###", "...." }
Returns: 2
Now John has to start from one of the two rightmost houses and travel around the city to the other rightmost house.
{ "....", "####", "...." }
Returns: 0
Here it's impossible to visit all open houses.
{ "....", "....", "...." }
Returns: 80
{"."}
Returns: 1
{"........"}
Returns: 2
{".", ".", ".", ".", "."}
Returns: 2
{"..............."}
Returns: 2
{".."}
Returns: 2
{".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}
Returns: 2
{".##.........#."}
Returns: 0
{"...######.#."}
Returns: 0
{"..#.##.###..#."}
Returns: 0
{".", "#", ".", "#", ".", "#", "#", ".", "#"}
Returns: 0
{".#.#.###.###.#.."}
Returns: 0
{"...", "..."}
Returns: 16
{"...", "...", "..."}
Returns: 24
{"....", "....", "....", "...."}
Returns: 296
{"...", "...", "..."}
Returns: 24
{"..", "..", "..", "..", "..", "..", "..", "..", "..", ".."}
Returns: 184
{"...", "...", "...", "...", "..."}
Returns: 132
{"...", "...", "...", "..."}
Returns: 80
{"....", "....", "....", "....", "...."}
Returns: 924
{"......", "......"}
Returns: 64
{"...", "...", "..."}
Returns: 24
{".....", ".....", ".....", "....."}
Returns: 924
{"....", "....", "....", "....", "...."}
Returns: 924
{".##..", "....."}
Returns: 4
{"..", ".#", ".."}
Returns: 2
{".........", ".....#..#", ".#..#...#"}
Returns: 0
{"#..", "...", "..."}
Returns: 20
{"..###", "..#..", "#....", "#...."}
Returns: 8
{"...##....", ".##....##"}
Returns: 0
{"...", ".##", "...", ".#.", "#..", "...", "...", "..."}
Returns: 0
{"....", "#.#.", "#..."}
Returns: 2
{"....", "....", "..##", "####", "####"}
Returns: 18
{".....#", "######", "######"}
Returns: 2
{"####", "##..", "....", "....", "...."}
Returns: 62
{"...", "...", "..#", "###", "###", "###"}
Returns: 14
{"###", "###", "###", "#..", "...", "..."}
Returns: 14
{"####", "####", "####", "####", "###."}
Returns: 1
{"......", "......", ".....#"}
Returns: 158
{"####", "####", "####", "####", "##.."}
Returns: 2
{"....", ".##.", ".##.", ".##.", "...."}
Returns: 28
{"....", ".##.", ".##.", ".##.", "...."}
Returns: 28
{"####", "#..#", "#..#", "#..#", "####"}
Returns: 0
{"####", "#..#", "#..#", "#..#", "####"}
Returns: 0
{"..............................................................................................."}
Returns: 2
{".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", ".", "."}
Returns: 2
{"......................."}
Returns: 2
{".", "#", "#", ".", ".", ".", ".", ".", ".", ".", ".", ".", "#", ".", ".", ".", "#", ".", ".", ".", "#", "#", "#", "#", "#", "#", ".", "#", ".", ".", ".", ".", ".", ".", "#", ".", "#", "#", ".", "#", "#", "#", ".", ".", "#", ".", ".", ".", "#", ".", "#", ".", "#", ".", "#", "#", "."}
Returns: 0
{"..#.#.###.###.#....##...###..####.##.###..###...#...##.#"}
Returns: 0
{".#..##........#..#..###.##.#..#..#.#.#.#####.#..###.....#.#..#.#.#......##..###"}
Returns: 0
{".", ".", "#", ".", "#", "#", "#", "#", "#", "#", "#", "#", ".", "#", ".", ".", "#", ".", "#", "#", "#", ".", ".", "#", ".", "#", ".", ".", "#", "#", ".", ".", "#", "#", ".", "#", "#", "#", ".", "#", "#", "#", "#", "#", "#", "#", ".", ".", ".", ".", ".", "#", "#", "#", "#", "#", "#", ".", "#", ".", ".", ".", ".", "."}
Returns: 0
{"..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", ".."}
Returns: 3616
{"..........................", ".........................."}
Returns: 1304
{"..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", ".."}
Returns: 2668
{"..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", ".."}
Returns: 2816
{"..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", ".."}
Returns: 268
{"..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", ".."}
Returns: 4904
{"...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "..."}
Returns: 793344
{"............", "............", "............", "............", "............", "............", "............"}
Returns: 460310200136
{"..............................", ".............................."}
Returns: 1744
{"..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", ".."}
Returns: 1744
{"..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", "..", ".."}
Returns: 1516
{"..........", "..........", "..........", "..........", "..........", "..........", "..........", "..........", "..........", ".........."}
Returns: 153925448694216
{"...........", "...........", "...........", "...........", "...........", "...........", "...........", "...........", "..........."}
Returns: 80716343118872
{".........", ".........", ".........", ".........", ".........", ".........", ".........", ".........", ".........", ".........", "........."}
Returns: 80716343118872
{"..........", "..........", ".#........", "..........", ".........#", "..........", "...#......", "..........", ".......#..", ".#......#."}
Returns: 0
{"..............", "..............", "..............", ".............#", ".#............", "..............", ".......#......"}
Returns: 52636824
{"....#.#", "#.#.#..", ".......", "..#.#..", ".#.....", ".......", ".......", ".......", ".......", ".#.....", ".......", ".....#.", ".......", "......."}
Returns: 0
{".........", ".........", ".........", "#........", ".........", ".........", "......#..", ".......#.", "..#......", ".........", "........."}
Returns: 315892808
{"...........", "...........", "...........", "...........", "...........", "...........", "...........", "........###", "###########"}
Returns: 125113936572
{"##########", "##########", "##########", "##########", "#########.", "..........", "..........", "..........", "..........", ".........."}
Returns: 922034