>컴퓨터 튜토리얼 >컴퓨터 지식 >하노이탑 문제를 해결하기 위해 C 언어 프로그램을 작성하는 방법

하노이탑 문제를 해결하기 위해 C 언어 프로그램을 작성하는 방법

PHPz
PHPz앞으로
2024-01-05 20:18:24960검색

하노이 타워 문제에 대한 C 언어 프로그램 작성 방법

실제로 세 가지 주요 단계가 있습니다:

먼저 a의 n-1개 디스크를 b, c를 거쳐 이동합니다.

둘째, 하단 디스크를 a에서 c로 이동합니다.

셋째, 첫 번째 n-1 플레이트는 모두 기둥 b에 있으므로 기둥 b만 기둥 a로 취급하고 위의 단계를 반복하면 됩니다.

#포함

퍼즐 해결 방법을 알아봅시다. 퍼즐을 진행하는 동안 판을 이동하는 기능을 사용할 수 있습니다. 함수의 프로토타입은 "void move(int n, char a, char b, char c)"입니다. 함수 내에서 재귀를 사용하여 플레이트를 이동할 수 있습니다. 플레이트 수 n과 세 기둥 a, b, c의 식별자를 지정함으로써 플레이트를 기둥 a에서 기둥 c로 순서대로 이동할 수 있습니다. 재귀의 개념

{

if(n==1)

printf("t%c->%cn", a, c); // 접시가 하나만 있는 경우 접시를 a에서 c로 직접 이동합니다

그밖에

{

아직 레벨을 통과하지 못한 플레이어에게 도움이 될 수 있도록 구체적인 퍼즐 해결 방법을 알아보세요. 퍼즐을 푸는 과정에서 재귀적 방법을 사용할 수 있습니다. 구체적인 작업은 다음과 같습니다. 1. n-1번째 판을 a 기둥에서 c 기둥으로 이동합니다. move(n-1, a, c, b); 2. n번째 플레이트를 기둥 a에서 기둥 b로 이동합니다. 3. 장소 n

아직 퍼즐을 풀지 못한 플레이어를 돕기 위해 다음 코드를 사용하여 문제를 해결할 수 있습니다: printf("t%c->%cn",a,c);

아직 이 레벨을 통과하지 못한 플레이어를 돕기 위해 퍼즐을 풀기 위한 구체적인 단계를 살펴보겠습니다. 먼저 첫 번째 n-1개의 플레이트를 B열에서 A열로 이동하여 B열이 시작 열이 되도록 한 다음 B열의 플레이트를 A열을 통해 C열로 이동할 수 있습니다.

}

}

int 메인()

{

int n;

printf("이동할 블록 수를 입력하세요:")

scanf("%d",&n);

move(n,'a','b','c');

0을 반환합니다;

}

하노이 타워 게임을 C 언어로 컴파일

어제 만들었어요.

#include void hanoi(int n, 문자 1, 문자 2, 문자 3);

void main() { int m; printf("타워의 층수를 입력하세요:"); scanf("%d",&m); printf("다음 단계를 따르세요: n"); 하노이(m,'1','2','3'); }

void hanoi(int n,char 1,char 2,char 3) { void move(char x,char y); if(n==1) move(one, three); ,3,2); 이동(1,3); 하노이(n-1,2,1,3) }

게임 내에서 이동 작업을 수행하는 데 도움이 될 수 있는 간단한 이동 기능을 공유해 드리겠습니다. 기능은 다음과 같습니다: 무효 이동(문자 x, 문자 y) { printf("%c--->%cn", x, y); } 이 함수는 현재 위치와 목표 위치를 나타내는 두 개의 매개변수를 받습니다. 이동 경로를 추적할 수 있도록 이동 과정을 인쇄합니다. 이 함수를 호출하여 필요에 따라 이동 작업을 수행할 수 있습니다. 이 기능이 레벨 통과에 도움이 되기를 바랍니다!

C 언어로 나한탑 프로그래밍 방법

여기에서 댓글을 읽을 수 있습니다:

제 프로그램은 아래와 같습니다:

아래는 퍼즐을 푸는 데 도움이 되는 기능으로, 한 타워에서 다른 타워로 상단 하위 블록을 이동하는 데 사용할 수 있습니다. ``C++ 무효 NuoYiWei(int FromTa, int ToTa) { //여기에 코드를 작성하여 상단 하위 블록을 FromTa에서 ToTa로 이동하세요. } ```` 이 기능을 기반으로 작동하고 특정 게임 규칙 및 퍼즐 요구 사항에 따라 퍼즐 해결 방법을 작성할 수 있습니다. 현실을 바탕으로 작성하는 것을 잊지 마세요

{

TopPoint[FromTa]는 각 타워 레벨의 높이를 기록하는 배열입니다. 타워에서 요소가 제거되면 타워의 높이가 한 단위 감소합니다. 이 배열의 목적은 각 타워의 현재 높이를 추적하는 데 도움을 주는 것입니다.

이 문제를 해결하기 위해 다음 코드를 사용하여 세 개의 타워의 데이터를 기록하고 한 타워에서 다른 타워로 데이터를 이동할 수 있습니다. ``파이썬 두이잔[ToTa][TopPoint[ToTa]] = 두이잔[FromTa][TopPoint[FromTa]] ```` 이 코드 줄은 이동된 타워의 상단(FromTa)에서 데이터를 가져와 이동된 타워의 상단(ToTa)으로 전송합니다. 이런 식으로 우리는 타워에 데이터를 기록하고 이동할 수 있습니다.

DuiZhan[FromTa][TopPoint[FromTa]] = 0; //원래 타워의 최상층을 비워두도록 복원합니다. 이제 아직 레벨을 통과하지 못한 플레이어를 돕기 위한 구체적인 퍼즐 해결 방법을 살펴보겠습니다.

아직 레벨을 통과하지 못한 플레이어들을 돕기 위해 구체적인 퍼즐 해결 방법을 알아봅시다. 주요 단계 중 하나는 타워를 대상 위치로 이동하는 것입니다. 구체적인 작업은 "TopPoint[ToTa]++;" 코드를 통해 대상 타워의 층 수를 1만큼 늘리는 것입니다. 이 단계는 퍼즐을 푸는 과정에서 중요한 부분이며, 모두가 원활하게 레벨을 통과하는 데 도움이 되기를 바랍니다.

}

void Nuo(int FromTa, int MidTa, int ToTa, int NeedMove) 함수는 하노이 타워 문제의 주요 솔루션입니다. 초기 조건과 타워 높이가 주어지면 이 함수를 사용하여 하노이 타워 문제를 해결할 수 있습니다.

{

구체적인 퍼즐 풀기 방법을 살펴보겠습니다. 이동해야 하는 타워의 높이가 2층 이상인 경우 다음 작업을 수행할 수 있습니다.

{

Nuo(FromTa, ToTa, MidTa, (NeedMove-1)); //먼저 아래쪽을 제외한 모든 위쪽 N-1을 중간 타워로 이동합니다. 이 단계는 함수를 재귀적으로 호출하여 수행됩니다. 퍼즐을 진행하는 동안 접시를 이동하려면 세 개의 타워(FromTa, ToTa 및 MidTa)를 사용해야 합니다. 먼저, 상단 N-1 플레이트를 FromTa에서 MidTa로 이동합니다(함수를 재귀적으로 호출하여 구현됨). 그런 다음 바닥판을 FromTa에서 ToTa로 이동합니다. 마지막으로 MidTa의 N-1 플레이트를 ToTa로 이동합니다(또한 재귀적으로 조정됨

NuoYiWei(FromTa,ToTa); //하단판을 시작타워에서 목표타워로 이동합니다.

Nuo(MidTa,FromTa,ToTa,(NeedMove-1)); //마지막으로 중간 타워로 이동한 모든 N-1 항목을 대상 타워로 이동합니다(이 기능이 이 기능을 수행할 수 있다고 가정)

}

그밖에

{

아직 레벨을 통과하지 못한 플레이어에게 도움이 될 수 있도록 구체적인 퍼즐 해결 방법을 알아보세요. 이동해야 할 블록이 하나만 남아 있으면 이동하면 됩니다.

}

}

이 함수는 C++로 작성되었습니다. C 언어를 사용하는 경우 몇 가지 세부 사항에 주의해야 합니다.

C 언어로 작성된 하노이 타워 프로그램이 있습니다. 필요하시면 sxt9840210@163.com으로 이메일을 보내 어떤 프로그램이 필요한지 명확하게 설명해주세요.

하노이탑 문제를 해결하기 위해 C 언어 프로그램을 작성하는 방법

하노이탑 C 언어 알고리즘

이전에 다른 사람의 답변을 저장했습니다. 살펴보세요:

재귀 알고리즘의 핵심 아이디어는 해결 목표를 시작점으로 사용하고 초기 조건인 재귀의 경계에 도달할 때까지 알 수 없는 항목을 해결하기 위해 자체 솔루션 프로세스를 점진적으로 호출하는 것입니다. 이 방법은 기존의 초기 조건에서 시작하는 방법과는 다르지만 문제를 해결하는 효과적인 방법 중 하나입니다. 재귀 알고리즘을 통해 복잡한 문제를 점차 간단한 하위 문제로 분해하고 최종적으로 전역 답을 얻을 수 있습니다. 재귀의 핵심은 재귀 경계를 명확히 하고 재귀 과정이 정확할 수 있도록 하는 것입니다

하노이탑 문제 해결의 핵심은 이동 규칙을 분석하고 패턴을 찾아 경계 조건을 결정하는 것입니다.

n개의 접시를 A에서 C로 이동하려면 다음 단계를 따르세요. (1) n-1개의 접시를 A에서 B로 이동합니다. (2) n번째 접시를 A에서 C로 이동합니다. -B부터 C까지 접시 1개. 함수를 재귀적으로 호출하면 A의 다른 판은 경계 조건 n=1에 도달할 때까지 위의 세 단계에 따라 계속 이동할 수 있습니다. 이렇게 하면 작업이 성공적으로 완료될 수 있습니다! 아직 레벨을 통과하지 못한 플레이어들에게 이 퍼즐 방법이 도움이 되기를 바랍니다.

생각이 명확하면 프로그램이 이해하기 쉬워집니다. 프로그램에서는 이동 함수가 호출될 때마다 매개변수를 분석하고 타워 A, B, C 간의 관계를 분석하는 것이 핵심이다. 아래의 실제 예를 들어 설명해 보겠습니다.

아직 퍼즐을 풀지 못한 플레이어에게 도움이 되도록 퍼즐 해결 방법을 자세히 살펴보겠습니다. 먼저 "move(int n, int x, int y, int z)" 함수를 사용하여 이동 작업을 수행할 수 있습니다.

②{

3 if (n==1)

아직 레벨을 통과하지 못한 플레이어에게 도움이 될 수 있도록 구체적인 퍼즐 해결 방법을 알아보세요. 나는 당신을 위해 다음 단계를 준비했습니다. 1. 먼저 printf라는 함수를 찾으세요. 2. 그런 다음 printf 함수의 괄호 안에 "%c-->%cn"을 ​​입력하면 두 문자가 인쇄되고 줄이 바뀐다. 3. 대괄호 안에 x와 z를 printf 함수에 대한 인수로 전달합니다.

⑤ 그 외

⑥ {

7 이동(n-1,x,z,y);

플레이어의 레벨 통과를 돕기 위해 구체적인 퍼즐 해결 방법을 살펴보겠습니다. 코드에는 "printf("%c-->%cn",x,z);"라는 코드 줄이 있습니다. 이 코드 줄의 기능은 문자 x와 문자 z 사이의 관계를 인쇄하는 것입니다. 인쇄된 결과를 관찰함으로써 퍼즐을 푸는 데 도움이 되는 몇 가지 단서를 얻을 수 있습니다.

9 {getchar();}//이 문장이 꼭 필요한가요? 떼어낼 수 있을 것 같은 느낌

⑩ 이동(n-1,y,x,z);

}

}

예를 들어 접시 4개가 있는데 이제 모두 타워 A에 배치되어 있습니다. 플레이트의 반경은 숫자 1, 2, 3, 4에 따라 더 큽니다. 이제 4개의 접시를 C로 옮기고 원래 순서대로 배열합니다. 먼저 4번을 C로 옮기는 방법을 살펴보겠습니다. B를 중개자로 사용해야 하며, 먼저 위의 세 가지를 B로 이동해야 합니다. 이 단계의 동작은 프로그램에서 ①이 이동 함수를 호출하기 시작한다는 것입니다(물론 첫 번째 호출은 1로 기록됩니다). 이후에는 ③n!=1로 판단되므로 ④는 아닙니다. 실행되었으나 ⑤가 다시 호출됨(2개로 표시됨) 3개의 디스크를 B로 이동하는 방법을 고려합니다. 이는 재귀 호출이므로 다시 ①으로 돌아가 이동 함수 호출을 시작하는데 해당 매개변수가 변경되었습니다. 이번에는 4개의 디스크를 A에서 C로 이동하는 것이 아니라 A에서 어떻게 이동하는지 고려해야 하기 때문입니다. 디스크 3개를 B로 옮깁니다. n=3이므로 직접 이동할 수 없고 중개자로서 C의 도움이 필요하다. 먼저 2개를 C로 이동하는 방법을 고려하므로 ⑤로 가서 다시 이동 함수(3으로 표시)를 호출한다. 마찬가지로 두 개의 디스크를 A에서 C로 직접 이동할 수 없으므로 B를 매개로 1을 B로 이동하는 과정을 고려해야 합니다. 이번에는 B를 중개자로 사용하고 목적은 C로 이동합니다. 다음으로 이동 함수를 다시 재귀적으로(4로 표시) 호출합니다. 이는 B로 이동하는 것을 의미하며 직접 수행할 수 있습니다. 프로그램은 문장 ③과 ④를 실행합니다. 프로그램은 가장 안쪽 호출에서 점프(즉, 네 번째 호출에서 점프)하고 이전 호출(세 번째)로 돌아가며, 세 번째 호출에서 이동 함수까지 아래로 계속됩니다. , 즉, 8, 즉 2 숫자는 C로 이동한 후

까지 계속 이어졌습니다.

⑩ 그리고 B로 이동한 것을 다시 C로 이동시켜 두 번째 재귀(C를 매개로 3개의 디스크를 B로 이동한 시간)로 돌아갑니다. ⑧을 실행하고 세 번째 디스크를 A에서 B로 옮긴 후 ⑩를 입력합니다. 이 호출에서는 A를 매개로 C의 두 디스크가 B로 이동하므로 또 다른 재귀 호출이 필요합니다. 누가 원타워인지, 누가 타겟타워인지, 누가 중간타워인지 명확하게 분석합니다. 이 과정은 위의 분석과 유사하므로 여기서는 반복하지 않겠습니다.

위 내용은 하노이탑 문제를 해결하기 위해 C 언어 프로그램을 작성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 docexcel.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제