한 노 타의 비 귀속 실현 (25 점)
스 택 을 통 해 한 노 타 워 의 문제 (n, a, b, c) 를 비 재 귀 (순환) 방식 으로 풀 고 N 개의 접 시 를 시작 기둥 (a 로 표시) 에서 기둥 (b 로 표시) 을 통 해 목표 기둥 (c 로 표시) 으로 이동 시 키 며 모든 이동 이 한 노 타 문제 의 요구 에 부합 하도록 확보한다.
입력 형식: 시작 기둥 의 디스크 수 를 정수 N 으로 입력 하 십시오.
출력 형식: 각 작업 (이동) 이 한 줄 을 차지 하고 기둥 1 - > 기둥 2 의 형식 으로 출력 합 니 다.
입력 예시: 3
출력 샘플: a - > c a - > b c - > b a - > c b - > a b - > c a - > c c
재 귀적 으로 실현 되 지 않 으 면 창고 에 써 야 한다.창 고 는 후진 이 먼저 나온다.이 문제 의 사고: 간단 한 몇 개의 탑 을 먼저 이동 하 는 방법 은 모두 같은 도해 블 로그 이다.
#include
#include
using namespace std;
char han[4] = { '0','a','b','c' };
stack<int> a[4];
bool move(int last, int next) {
if (a[last].empty())
return false;
if (!a[next].empty())
if ((a[next].top() - a[last].top()) < 0)
return false;
a[next].push(a[last].top());
a[last].pop();
printf("%c -> %c
", han[last], han[next]);
return true;
}
int main() {
int N, count = 0;
cin >> N;
for (int i = 0; i < N; i++)
a[1].push(N - i);
if (N % 2 == 1) {
han[2] = 'c'; han[3] = 'b';
}
while (++count) {
move((count - 1) % 3 + 1, (count) % 3 + 1);
if (!move((count - 1) % 3 + 1, (count + 1) % 3 + 1)&&!move((count + 1) % 3 + 1, (count - 1) % 3 + 1))
break;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.