본문 바로가기

C, C++, C#/Algorithm

하노이의 탑 c 예제

반응형

안녕하세요. 이번에는 c를 공부하다보면 대부분 마주치는 하노이의 탑에대해서 올려 보겠습니다.

 

어린 얘들의 사고력?을 키워주기 위해 장난감으로도 있는데요.

이 문제의 기본적 조건이 있습니다.

1. 큰 원판은 작은 원판에 올라가지 못한다.

2. 한번에 한개씩만 움직일 수 있다.

3. 3개의 움직일 수 있는 칸?이 있다.

 

위키백과 가기

위키백과에 애니메이션까지 설명이 아주 잘 나와 있어요.

아래 있는 소스 또한 위키백과에 있는 소스를 가지고 만든 소스입니다.

거기에 시간을 재는 clock() 함수를 이용해서 시작 끝시간을 확인해 원판에 개수에 따라 걸리는 시간을 체크 했습니다.

 

전 항상 소스를 올리도록 노력합고있어요!

아래 캡쳐된 그림의 Count : 는 원판의 갯수고 뒤는 시간이에요! 대략 두배씩 시간이 오르네요!

조금이라도 정확한 시간을 보려고 printf문은 뻇습니다.)

 

반응형
#include <stdio.h>

#include<time.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 = 2;

 while(true)

 {

 n++;

 printf_s("Count: %d", n);

 //scanf_s("%d", &n);



 clock_t st, et; //각각 start time, end time을 의미(이름 상관 없음)

 st = clock();



 hanoi(n, 1, 2);

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

 et = clock();

 double Colcok = double((et - st) / 1000.0);

 printf("\t%f s\n", Colcok);

 }

 return 0;



}
반응형

'C, C++, C# > Algorithm' 카테고리의 다른 글

피보나치 수열 반복형  (0) 2016.11.23
하노이의탑 반복형  (0) 2016.11.16
피보나치 수열 재귀  (0) 2016.11.04
The Next Higher Permutation 반복(iterater)  (0) 2016.11.03
The Next Higher Permutation 재귀(Recursive)  (0) 2016.11.02