剛開始學習《演算法設計與分析》
裡面的漢諾塔問題的求解演算法簡直讓我無語了··
用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操作時,常常需要耗很長時間,為了不讓使用者有乙個乏味的等待或是錯誤的認為系統已經宕機,有必要給程式新增進度提示功能。在視窗介面中要顯示進度條和顯示完成百分比是非常容易的,但如何在控制台下去完成這個任務了?一行一行的輸出當前完成百分比肯定是不夠美觀的,最好能 原地踏步 一樣...