문제
7 개의 버킷이 일렬로 정렬되어 있다고 상상해보십시오. 각 버킷에는 최대 2 개의 사과가 포함될 수 있습니다. 1에서 13까지 레이블이 지정된 13 개의 사과가 있습니다. 이들은 7 개의 버킷에 배포됩니다. 예를 들어
{5,4}, {8,10}, {2,9}, {13,3}, {11,7}, {6,0}, {12,1}
여기서 0은 빈 공간을 나타냅니다. 사과 표시 순서 내의 각 버킷에 관련되지 않은 경우 (예 : {5,4}에 상당하는 {4,5}).
대상 버킷에 다른 애플을위한 공간이 있으면 한 버킷에서 인접한 버킷으로 사과를 옮길 수 있습니다. 각 이동은 이동하려는 사과의 수로 표시됩니다 (빈 공간이 하나만 있기 때문에 분명합니다). 예를 들어, 이동을 적용
7
위의 배열에
{5,4}, {8,10}, {2,9}, {13,3}, {11,0}, {6,7}, {12,1}
객관적인
STDIN에서 배열을 읽고 다음 배열로 정렬하는 프로그램을 작성하십시오.
{1,2}, {3,4}, {5,6}, {7,8}, {9,10}, {11,12}, {13,0}
가능한 적은 움직임을 사용합니다. 다시 말하지만, 각 버킷 내에 사과가 나타나는 순서 는 관련이 없습니다. 버킷의 순서는 중요합니다. 쉼표로 구분 된 각 배열을 정렬하는 데 사용되는 동작을 출력해야합니다. 예를 들어
13, 7, 6, ...
당신의 점수는 다음 배열을 해결하는 데 필요한 이동 수의 합과 같습니다.
{8, 2}, {11, 13}, {3, 12}, {6, 10}, {4, 0}, {1, 7}, {9, 5}
{3, 1}, {6, 9}, {7, 8}, {2, 11}, {10, 5}, {13, 4}, {12, 0}
{0, 2}, {4, 13}, {1, 10}, {11, 6}, {7, 12}, {8, 5}, {9, 3}
{6, 9}, {2, 10}, {7, 4}, {1, 8}, {12, 0}, {5, 11}, {3, 13}
{4, 5}, {10, 3}, {6, 9}, {8, 13}, {0, 2}, {1, 7}, {12, 11}
{4, 2}, {10, 5}, {0, 7}, {9, 8}, {3, 13}, {1, 11}, {6, 12}
{9, 3}, {5, 4}, {0, 6}, {1, 7}, {12, 11}, {10, 2}, {8, 13}
{3, 4}, {10, 9}, {8, 12}, {2, 6}, {5, 1}, {11, 13}, {7, 0}
{10, 0}, {12, 2}, {3, 5}, {9, 11}, {1, 13}, {4, 8}, {7, 6}
{6, 1}, {3, 5}, {11, 12}, {2, 10}, {7, 4}, {13, 8}, {0, 9}
그렇습니다. 이러한 각 배열에는 해결책이 있습니다.
규칙
- 솔루션은 이동 당 버킷 수로 다항식으로 실행해야합니다. 요점은 영리한 휴리스틱을 사용하는 것입니다.
- 모든 알고리즘은 결정 론적이어야합니다.
- 동점 일 경우 가장 짧은 바이트 수가 이깁니다.