ABOUT

포니테일 모에
by Utedier
이글루 파인더
카테고리
이전 블로그
이글루 링크
최근 등록된 덧글
최근 등록된 트랙백
모리야마 다이스케- 월드..
by 시무이의 바로크니토 홀..
이름 문답
by OverHeats!
지인문답
by 시무이의 새벽이 머무는..
모에테스트-당신의 연..
by 스트레인지 데이스
모에 적성검사
by 시무이의 얼어붙은 영지(..
당신은 어떤 블로거인가?
by 시무이의 얼어붙은 영지(..
나는 어떤 블로거인가? ...
by OverHeats!
에고그램 테스트
by OverHeats!
나도 바탕화면
by OverHeats!
별세계
rss

skin by 서비
2007년 03월 14일
〃Posted title : 자료구조 - Hanoi Tower




#include <stdio.h>
void main()
{
        while (true) {
                int nCtr;
                printf("Input # of disk: ");
                scanf("%d", &nCtr);                        // 옮기는 탑의 층을 입력 받는다.
                if (nCtr <= 0)
                        break;
                void Hanoi(int nDisk, int nFrom, int nTo);
                printf("%d storied tower\n", nCtr);
                Hanoi(nCtr, 1, 2);                        // 1에서 2로 탑을 옮긴다.
        }
}

void Hanoi(int nDisk, int nFrom, int nTo)
{
        int temp = 6 - (nFrom + nTo);
        if (nDisk == 0) return;
        Hanoi(nDisk-1, nFrom, temp);
        printf(" %d --> %d \n", nFrom, nTo);
        Hanoi(nDisk-1, temp, nTo);
}





수학적으로도 유명한 하노이의 타워 문제.

1학년 C언어 강의때 어려워서 안한다길래 와~ 하고 좋아했었는데, 결국 자료구조 시간에 만났다.

하노이 타워 프로그래밍의 기본 원리는 다음과 같다.

Q. n개의 탑을 nTo로 옮겨라
1. n-1개 탑을 nFrom -> temp
2. 1개의 탑을 nFrom -> nTo
3. n-1개 탑을 temp -> nTo

n개의 탑을 옮겨야 하므로 재귀함수를 이용. 그리하여 결과물이 저것.

문제는... 교수님은 Hanoi 함수부분이 4줄이어야 정상이고, 5줄이면 약간 부족한 것이라고 하셨다.

근데 저건 줄이고 줄여서 5줄 -_-;; 개선방향을 모르겠다.

밑에 3줄은 필히 필요하고... if문도 무한루프를 막기위해 필요한데... 그렇다고 temp를 쓰지않는건 왠지 지저분하고.

게다가 정작 중요한건 프로그램의 흐름, 즉 알고리즘이 머리속에서 안돌아간다.

책을 베끼거나 참고한 것도 없는데 소스를 성공적으로 짠 것이 어이없을 따름.



과제 제출까지는 4일정도 남았으니 더 고민해봐야겠다.
by Utedier | 2007/03/14 13:30 | 소스연습 | 트랙백 | 덧글(0)
트랙백 주소 : http://veldise.egloos.com/tb/3197626
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>