*** ameoba graph ****는 노드가 모두 0에서 음이 아닌 정수 N까지의 값을 갖는 트리 유형이며 x가 N 인 값을 가진 특정 노드는 x가 +1 인 별개의 노드에 연결됩니다. 1.
N = 3에 대한 아메 오바 그래프 (A 3으로 표시 )
2는 3을 공유 할 수 없습니다. 정확히 3 개의 3은 각각 2에 "포함"되어야합니다.
도전
당신의 임무는 노드 사이 의 맨해튼 거리를 탐욕스럽게 최소화함으로써 2 차원 그리드에서 이러한 아메 오바 그래프를 유도 적으로 "성장"시키는 것입니다 .
- 자료의 경우 : 0 단순히 그래프이다
0
. - 유도 단계 : N + 1이 반복적으로 존재하는 N의 값을 노드 최대한 가까이 새로운 N + 1 개 값 노드를 배치함으로써 생성되는 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까지의 숫자를 포함하고 유효한 ameoba 그래프를 출력해야합니다.
8을 넘어서 일어나는 일은 중요하지 않습니다.
(A 8 에는 46234 개의 노드가 포함되어 있습니다. A 8 이외의 것은 너무 멀리 있습니다.이를 알아 낸 Martin Büttner에게 감사합니다.)
입력은 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
* 이러한 유형의 그래프에는 이미 이름이있을 수 있습니다. 내가 방금 만든 것을 인정합니다. ;)