소스 설명

  • 이 소스는 Hanoi 문제를 푼다음에 보면서 비교를 하는 식으로 보면 풀기 전에 보는 것보다 더 많은 도움이 될거 같네요.
  • An = 2An-1 + 1
  • 위 식을 잘 활용
  • 단계를 크게 세단계로 나눈다.

~cpp 
void hanoi(int n,int a, int b)  //실제 구현
{
	if(n!=0)
	{
		hanoi(n-1, a,inout(a,b));  //1 번 단계 시작점 a에서 입력된 목적지링(b) 말고 다른 쪽으로 옮긴다.
  		cout<<a<<"->"<<b<<"\n";   //2 번 단계  시작점의 가장 큰 링을 목적지 링(b)으로 옮긴다.
		hanoi(n-1, inout(a,b),b);  //3번 단계  첫번째 단계에서 간곳-inout(a,b) 에서 목적지링(b) 으로 간다..
	}

설명이 너무 허접한거 같습니다. ㅠㅜ 누가 보충좀.. ㅠㅜ 
}


실제 소스

~cpp 
#include <iostream>
using namespace std;
void hanoi(int n,int a, int b); //a, 가 출발 b 가 목적지 n 이 갯수
int inout(int i,int j);
int main()
{
	int n;
	cout<<"하노이 막대기 갯수를 넣으시오 ! : ";
	cin>>n;  // 입력을 받는다.
	hanoi(n,1,3);
	return 0;
}
int inout(int i, int j) // 1,2,3중에서 i,j (1,2,3중 하나인 숫자)가 아닌 숫자가 리턴됨
{
	if((i==1 && j==2) || (i==2 && j==1))
		return 3;
	else if((i==1 && j==3) || (i==3 && j==1))
		return 2;
	else
		return 1;
}
void hanoi(int n,int a, int b)  //실제 구현
{
	if(n!=0)
	{
		hanoi(n-1, a,inout(a,b));
		cout<<a<<"->"<<b<<"\n";
		hanoi(n-1, inout(a,b),b);
	}
}
Retrieved from http://wiki.zeropage.org/wiki.php/HanoiProblem/상협
last modified 2021-02-07 05:23:21