演算法設計 VC控制台模擬「漢諾塔」移動過程

2021-05-05 06:35:27 字數 1499 閱讀 8271

剛開始學習《演算法設計與分析》

裡面的漢諾塔問題的求解演算法簡直讓我無語了··

用3個語句就把這麼複雜的問題解決了

相信很多人跟我一樣,對其中實際的移動過程還是不太清楚·

我就自己寫了這個模擬漢諾塔移動過程的程式~~

裡面用數字代替圓盤~~數字越大代表的圓盤就越大

我沒寫可供外部輸入的函式,大家可以直接修改程式裡的全域性資料裡的資料就可以了

主要可以修改兩個,num為圓盤數,建議大家不要改超過8,8個圓盤要2^8=255步解開~~10個時已經超過1000步了

為了讓移動過程更加明顯,在移動一步後會暫停一下程式,暫停時間為timesleep,大家可以修改此引數來選擇合適的暫停時間。

**在vc2008下編譯通過。如果在vc6.0下只要把開頭的#include "stdafx.h"去掉,以及把主函式名改為main,把引數去掉就可以了

**如下:

// 漢諾塔.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include using namespace std;

//// 全域性資料

const int num = 4; // 漢諾塔的圓盤的個數

const int timesleep = 500; // 暫停一下

int count = 0; // 步數計數器

coord line[3]; // 記錄3個鐵柱的頂端位置

coord step; // 顯示步數的位置

handle hscreen; // 控制台顯示控制代碼

//// 函式

/* 遞迴求解漢諾塔問題(與顯示無關) */

void hanoi(const int n, const int a, const int b, const int c);

/* 顯示每一步 */

void move(const int n, const int a, const int c);

/* 繪製初始漢諾塔 */

void drawhanoi();

/* 主函式 */

int _tmain(int argc, _tchar* argv)

/* 將n個圓盤從a柱借助b柱移動c柱上 */

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

}/* 將第n個圓盤從a柱移動到c柱上 */

void move(const int n, const int a, const int c)

/* 繪製初始漢諾塔 */

void drawhanoi()

setconsolecursorposition(hscreen, step);

cout << "步數:";

step.x += 6;

}

VC控制台定位游標

gotoxy 是 tc 下用來實現游標定位的函式,經常有人問起 vc 下怎麼實現游標定位。很可惜,vc 下面沒有同名函式,不過有實現同樣功能的 api 可呼叫,只是稍微麻煩一些。封裝成 tc 同樣的介面可以這麼做 include include void gotoxy int x,int y set...

VC 控制台顏色設定

通常控制台都是白字黑底的,千篇一律不免單調。適當的在控制台中加入一些彩色可以讓人耳目一新,本文介紹如何使用系統api介面去修改控制台的文字和背景顏色。主要用到如下二個函式 得到standard input,standard output,or standard error的裝置控制代碼 handle...

VC控制台顯示進度

當程式在進行大量的運算或io操作時,常常需要耗很長時間,為了不讓使用者有乙個乏味的等待或是錯誤的認為系統已經宕機,有必要給程式新增進度提示功能。在視窗介面中要顯示進度條和顯示完成百分比是非常容易的,但如何在控制台下去完成這個任務了?一行一行的輸出當前完成百分比肯定是不夠美觀的,最好能 原地踏步 一樣...