소스 설명 ¶
- ì�´ 소스는 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);
}
}










