한국투자증권 주식매매프로그램 만들기

파이썬 주식매매프로그램 만들기

C언어

하노이 탑 알고리즘(Hanoi top)

토폴로지 2016. 4. 27. 19:26

하노이 탑 검색해보면 수두룩 뺵뺵빽이 나온다.


그럼에도 글을 쓰는 이유는 무엇이냐....



(그림 출처 : http://programs-ram.blogspot.kr/2015/01/c-program-to-print-tower-of-hanoi-using.html)


대부분의 블로그에서 하노이탑 설명이 위의 그림처럼 3번째 기둥에서 마무리 짓는 형태로 설명하고 있다.


그러면서 코드는 만들어놓은게 




#include <stdio.h>

#include <stdlib.h>

int Cnt;

void hanoi(int n, int a, int b)

{

int temp;

if(n==1)

{

printf("Move %d, move from Fall%d, to Fall%d\n", n, a, b);

}

else

{

temp=6-a-b;

hanoi(n-1, a, temp);

printf("Move %d, move from Fall%d, to Fall%d\n", n, a, b);

hanoi(n-1, temp, b);

}

        Cnt++;

}

int main()

{

int n;

printf("Input disk number:");

fflush(stdout);

scanf("%d", &n);

hanoi(n, 1, 2);

        printf("Count : %d\n",Cnt);

return 0;


}

 



 위의 코드다 코드 출처는 위키 피디아~


위의 코드와 그림의 설명은 약간 다르다.


이것 때문에 무지 헷갈렸다.


위의 그림은 3번째 기둥에 마지막 원판을 올리지만 위의 코드는 2번째 기둥에 마지막 원판을 올린다.


즉 이 코드를 위의 그림 처럼 실행시키고 싶으면




#include <stdio.h>

#include <stdlib.h>

int Cnt;

void hanoi(int n, int a, int b)

{

int temp;

if(n==1)

{

printf("Move %d, move from Fall%d, to Fall%d\n", n, a, b);

}

else

{

temp=6-a-b;

hanoi(n-1, a, temp);

printf("Move %d, move from Fall%d, to Fall%d\n", n, a, b);

hanoi(n-1, temp, b);

}

        Cnt++;

}

int main()

{

int n;

printf("Input disk number:");

fflush(stdout);

scanf("%d", &n);

hanoi(n, 1, 3);

        printf("Count : %d\n",Cnt);

return 0;


}

 


위의 코드처럼 hanoi(n, 1, 3); 으로 해줘야한다.


hanoi(n-1, a, temp); 의 부분은 n-1개의 원판을 a라는 기둥에서 temp(임시로 원판을 옮기는 기둥)기둥으로 옮기는 과정인데 위의 그림처럼할려면 temp기둥은 2번째 기둥이 되어야한다.


마찬가지로 


hanoi(n-1, temp, b);여기는 temp 임시로 옮겼던 원판을 b기둥으로 꼽는다.


설명은 그림처럼 해놓고


코드는 다르게 짜놓은 사람보면 .....;;;;;;


내가 멍청한건가.....

반응형

'C언어' 카테고리의 다른 글

힙 정렬 (Heap Sort)  (0) 2016.04.15