Графік *** ameoba **** - це дерево , у всіх вузлах якого є значення від 0 до якогось негативного цілого числа N, а будь-який конкретний вузол зі значенням x <N з'єднується з x + 1 різними вузлами зі значеннями x + 1.
Графік Амеби для N = 3: (Позначається A 3 )
Зауважте, що двом особам заборонено ділитися жодним із 3-х; рівно три 3 повинні "належати" кожному 2.
Виклик
Ваше завдання - індуктивно "виростити" ці графіки амеби в двовимірній сітці, жадібно мінімізуючи відстань між Манхеттеном між вузлами:
- Базовий регістр: A 0 - це просто графік
0
. - Індуктивний крок: A N + 1 генерується шляхом ітеративного розміщення нових вузлів з оцінкою N + 1 максимально наближеними до вузлів N значень у існуючій структурі A N. (Це може бути максимально близько, оскільки найближчі місця вже заповнені.)
Для індуктивного кроку загальною процедурою, яку ви повинні дотримуватися, є:
for each existing node P with value N:
for each new N+1 valued node Q you need to connect to P: //this loops N+1 times
find the set of vacant spots that are minimally distant from P //by Manhattan distance
place Q in any of these vacant spots
(Інша процедура з нерозрізним результатом є нормальною.)
Приклад росту для A 4 :
A0 is always the same:
0
For A1 I happen to put the 1 to the right of the 0 (it has to go on one of the 4 open sides):
01
For A2 I happen to put the two 2's above and to the right of the 1:
2
012
For A3 I find that one of the six 3's I must place cannot be directly next to a 2, so I put in one of the next closest places:
3
323
0123
33 <-- this 3 is distance two away from its 2
The process continues in A4. Note that I'm iterating over each 3 and placing four 4's next to it or as close as possible, then moving to the next 3 (the order of 3's does not matter):
444
443444
4323444
4012344
44334
4444
44
Always keep in mind that nodes cannot be "shared".
Програма
Програма, яку ви пишете, повинна приймати число від 0 до 8 (включно) і виводити дійсний графік амеби, використовуючи пояснену вище індуктивну схему зростання.
Те, що відбувається за межами 8, не має значення.
(А 8 містить 46234 вузли, які штовхають його. Все, що перевищує A 8, було б занадто далеко. Дякую Мартіну Бюттнеру, що помітив це.)
Вхід повинен надходити з stdin або командного рядка, а вихід повинен надходити до stdout або файлу.
Приклади (взяті безпосередньо зверху)
Input: 0
Output:
0
Input: 1
Output:
01
Input: 2
Output:
2
012
Input: 3
Output:
3
323
0123
33
Input: 4
Output:
444
443444
4323444
4012344
44334
4444
44
* Цей тип графіків може вже мати назву. Признаюсь, я щойно їх придумав. ;)