알고리즘을 다음과 (효율적으로) 해결하는 것에 대해 궁금합니다. 숫자 [1..9]의 2D 행렬이 상단에서 수평선 1)에서 바닥 (9)까지 수직으로 또는 수평으로 다른 숫자로 뒤집기 만합니다.알고리즘 : 2 차원 행렬 재정렬 (요소 '뒤집기'를 통해)
예시 입력 행렬 :
1 8 2 6 1 6
9 2 5 1 6 2
3 6 9 2 9 8
5 1 7 4 2 8
4 2 7 6 9 5
원하는 출력 매트릭스 '뒤집기'에
1 1 1 1 2 2
2 2 2 2 3 4
4 5 5 5 6 6
6 6 6 7 7 8
8 8 9 9 9 9
명확화 : 예를 들면, 입력 행렬을 가지고. 왼쪽 상단에 "1"이 있습니다. 그 1은 그 옆에있는 8을 사용하여 수평으로 뒤집을 수 있습니다 (첫 번째 행은 이제 8 1 2 6 1 6
이됩니다). 또는 아래의 9가 수직으로됩니다 (첫 번째 열은 이제 9 1 3 5 4
이됩니다). 2를 대각선으로 뒤집을 수 없습니다.
이 문제의 해결책은 무엇입니까?
또한 명확히 말하십시오. 효율적으로 말하면 알고리즘의 런타임 또는 솔루션의 길이 (이동)를 의미합니까? –
@ Walt : 이동 횟수를 줄이면 효율성이 높아집니다. – Alex
@Alex : 그러면 A * 제안은 정말 좋습니다.휴리스틱이 실제 남은 거리보다 작 으면 A *가 최적으로 보장됩니다. –