[Help Me] South African Programming Olympiad 2k+7

I'm really struggling to solve problem #5 from the South African Programming Olympiad 2007. please help by sharing an approach, algorithm or program.


Q5. Rooms

Proposed & Prepared by Marco Gallotta

Description

Fred the manic store-keeper can't keep up with the growing size of his store. He wants to know how many rooms he has and the size of the smallest and largest ones. However, his store is too large for him to work out on his own, so he has asked for your help.

Task

Fred has given you the plans of his store. In the plans, a wall is represented by a '1' and a floor tile by a '0'. Your task is to write a program to group neighbouring floor tiles into rooms. A tile can be grouped together with all tiles one space directly to its left, right, top and bottom. Note that this does not include diagonals. A room is defined as a group of floor tiles that cannot be grouped together with any further floor tiles.

Given the plans your task is to work out:

  1. The total number of rooms
  2. The size of the smallest room
  3. The size of the largest room.

Constraints

1 <= width, height <= 20.

Sample run

Input:
Enter width: 3
Enter height: 2
Enter row: 001
Enter row: 010

Output:
Number of rooms: 2
Smallest room: 1
Largest room: 3

#ComputerScience

Note by Mark Mottian
5 years, 10 months ago

No vote yet
1 vote

  Easy Math Editor

This discussion board is a place to discuss our Daily Challenges and the math and science related to those challenges. Explanations are more than just a solution — they should explain the steps and thinking strategies that you used to obtain the solution. Comments should further the discussion of math and science.

When posting on Brilliant:

  • Use the emojis to react to an explanation, whether you're congratulating a job well done , or just really confused .
  • Ask specific questions about the challenge or the steps in somebody's explanation. Well-posed questions can add a lot to the discussion, but posting "I don't understand!" doesn't help anyone.
  • Try to contribute something new to the discussion, whether it is an extension, generalization or other idea related to the challenge.
  • Stay on topic — we're all here to learn more about math and science, not to hear about your favorite get-rich-quick scheme or current world events.

MarkdownAppears as
*italics* or _italics_ italics
**bold** or __bold__ bold

- bulleted
- list

  • bulleted
  • list

1. numbered
2. list

  1. numbered
  2. list
Note: you must add a full line of space before and after lists for them to show up correctly
paragraph 1

paragraph 2

paragraph 1

paragraph 2

[example link](https://brilliant.org)example link
> This is a quote
This is a quote
    # I indented these lines
    # 4 spaces, and now they show
    # up as a code block.

    print "hello world"
# I indented these lines
# 4 spaces, and now they show
# up as a code block.

print "hello world"
MathAppears as
Remember to wrap math in \( ... \) or \[ ... \] to ensure proper formatting.
2 \times 3 2×3 2 \times 3
2^{34} 234 2^{34}
a_{i-1} ai1 a_{i-1}
\frac{2}{3} 23 \frac{2}{3}
\sqrt{2} 2 \sqrt{2}
\sum_{i=1}^3 i=13 \sum_{i=1}^3
\sin \theta sinθ \sin \theta
\boxed{123} 123 \boxed{123}

Comments

Perhaps you could reduce this to a graph theory problem. Make an adjacency matrix where each zero in the original data corresponds to a row and column, with 1's in entries corresponding to adjacent zeroes (you could do this in one pass through the given data). Perform matrix operations to order the adjacency matrix into connected components. Each component is one room, and then you just have to pass through the components to find the smallest and largest.

Maggie Miller - 5 years, 10 months ago

Log in to reply

I am not sure I understand.

Also, the adjacency matrix takes up a lot of space.

Agnishom Chattopadhyay - 5 years, 7 months ago

Another example to ensure that you fully understand the problem:

Suppose the plan looks like this:

0000
1111
0100
0100

Number of rooms: 3

Smallest room: 2

Largest room:4

Mark Mottian - 5 years, 10 months ago

  1. Keep a matrix to keep track of which cells have been visited.
  2. While there are still cells unvisited:
    1. Pick the first unvisited cell which is a floor tile
    2. Use Depth First Search to visit all the reachable floors. Remember not to cross walls and keep counting th tiles.

Agnishom Chattopadhyay - 5 years, 7 months ago
×

Problem Loading...

Note Loading...

Set Loading...