青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

/*
問題描述:有三個(gè)柱子A, B, C. A柱子上疊放有n個(gè)盤子,每個(gè)盤子都比它下面的盤子要小一點(diǎn),
可以從上到下用1, 2, ..., n編號(hào)。要求借助柱子B,把柱子A上的所有的盤子移動(dòng)到柱子C上。
移動(dòng)條件為:1、一次只能移一個(gè)盤子;
2、移動(dòng)過程中大盤子不能放在小盤子上,只能小盤子放在大盤子上。
*/
/*
遞歸的算法相信大多數(shù)人都知道,非遞歸算法也有出現(xiàn)過。
如:摘自http://www.programfan.com/club/old_showbbs.asp?id=96548
作者:qq590240
#include <iostream>
#include <stdlib.h>

#ifdef _WIN32
using namespace std;
#endif

static void hanoi(int height)
{
??? int fromPole, toPole, Disk;
??? int *BitStr = new int[height],
??????? *Hold?? = new int[height];
??? char Place[]? = {'A', 'B', 'C'};
??? int i, j, temp;

??? for (i=0; i < height; i++)
??? {
??????? BitStr[i] = 0;
??????? Hold[i] = 1;
??? }
??? temp = 3 - (height % 2);
??? int TotalMoves = (1 << height) - 1;
??? for (i=1; i <= TotalMoves; i++)
??? {
??????? for (j=0 ; BitStr[j] != 0; j++)
??????? {
??????????? BitStr[j] = 0;
??????? }
??????? BitStr[j] = 1;
??????? Disk = j+1;
??????? if (Disk == 1)
??????? {
??????????? fromPole = Hold[0];
??????????? toPole = 6 - fromPole - temp;
??????????? temp = fromPole;
??????? }
??????? else
??????? {
??????????? fromPole = Hold[Disk-1];
??????????? toPole = 6 - Hold[0] - Hold[Disk-1];
??????? }
??????? cout << "Move disk " << Disk << " from " << Place[fromPole-1]
???????????? << " to " << Place[toPole-1] << endl;
??????? Hold[Disk-1] = toPole;
??? }
}

?


int main(int argc, char *argv[])
{
??? cout << "Towers of Hanoi: " << endl
???????? << "moving a tower of n disks from pole A to pole B by using pole C" << endl;
??? cout << "Input the height of the original tower: ";
??? int height;
??? cin >> height;
??? hanoi(height);

??? system("PAUSE");
??? return EXIT_SUCCESS;
}
?////////////////////////////////////////////////////////////
?我在這里根據(jù)《數(shù)學(xué)營養(yǎng)菜》(談祥柏 著)提供的一種方法,編了一個(gè)程序來實(shí)現(xiàn)。
*/
/*
算法介紹:
首先容易證明,當(dāng)盤子的個(gè)數(shù)為n時(shí),移動(dòng)的次數(shù)應(yīng)等于2^n - 1。
一位美國學(xué)者發(fā)現(xiàn)一種出人意料的方法,只要輪流進(jìn)行兩步操作就可以了。
首先把三根柱子按順序排成品字型,把所有的圓盤按從大到小的順序放在柱子A上。
根據(jù)圓盤的數(shù)量確定柱子的排放順序:若n為偶數(shù),按順時(shí)針方向依次擺放 A B C;
若n為奇數(shù),按順時(shí)針方向依次擺放 A C B。
(1)按順時(shí)針方向把圓盤1從現(xiàn)在的柱子移動(dòng)到下一根柱子,即當(dāng)n為偶數(shù)時(shí),若圓盤1在柱子A,則把它移動(dòng)到B;
若圓盤1在柱子B,則把它移動(dòng)到C;若圓盤1在柱子C,則把它移動(dòng)到A。
(2)接著,把另外兩根柱子上可以移動(dòng)的圓盤移動(dòng)到新的柱子上。
即把非空柱子上的圓盤移動(dòng)到空柱子上,當(dāng)兩根柱子都非空時(shí),移動(dòng)較小的圓盤
這一步?jīng)]有明確規(guī)定移動(dòng)哪個(gè)圓盤,你可能以為會(huì)有多種可能性,其實(shí)不然,可實(shí)施的行動(dòng)是唯一的。
(3)反復(fù)進(jìn)行(1)(2)操作,最后就能按規(guī)定完成漢諾塔的移動(dòng)。
*/
#include <iostream>
using namespace std;

const int MAX = 64; //圓盤的個(gè)數(shù)最多為64

struct st{? //用來表示每根柱子的信息
????? int s[MAX]; //柱子上的圓盤存儲(chǔ)情況
????? int top; //棧頂,用來最上面的圓盤
????? char name; //柱子的名字,可以是A,B,C中的一個(gè)
?????
????? int Top()//取棧頂元素
????? {
??????????? return s[top];
????? }
????? int Pop()//出棧
????? {
??????????? return s[top--];
????? }
????? void Push(int x)//入棧
????? {
??????????? s[++top] = x;
????? }
} ;

long Pow(int x, int y); //計(jì)算x^y
void Creat(st ta[], int n); //給結(jié)構(gòu)數(shù)組設(shè)置初值
void Hannuota(st ta[], long max); //移動(dòng)漢諾塔的主要函數(shù)

int main(void)
{
????? int n;
????? cin >> n; //輸入圓盤的個(gè)數(shù)
?????
????? st ta[3]; //三根柱子的信息用結(jié)構(gòu)數(shù)組存儲(chǔ)
????? Creat(ta, n); //給結(jié)構(gòu)數(shù)組設(shè)置初值

????? long max = Pow(2, n) - 1;//動(dòng)的次數(shù)應(yīng)等于2^n - 1
????? Hannuota(ta, max);//移動(dòng)漢諾塔的主要函數(shù)

????? system("pause");
????? return 0;
}

void Creat(st ta[], int n)
{
????? ta[0].name = 'A';
????? ta[0].top = n-1;
????? for (int i=0; i<n; i++) //把所有的圓盤按從大到小的順序放在柱子A上
??????????? ta[0].s[i] = n - i;
???????????
????? ta[1].top = ta[2].top = 0;//柱子B,C上開始沒有沒有圓盤
????? for (int i=0; i<n; i++)
??????????? ta[1].s[i] = ta[2].s[i] = 0;
???????????
????? if (n%2 == 0) //若n為偶數(shù),按順時(shí)針方向依次擺放 A B C
????? {
??????????? ta[1].name = 'B';
??????????? ta[2].name = 'C';
????? }
????? else? //若n為奇數(shù),按順時(shí)針方向依次擺放 A C B
????? {
??????????? ta[1].name = 'C';
??????????? ta[2].name = 'B';
????? }
}

long Pow(int x, int y)
{
????? long sum = 1;
????? for (int i=0; i<y; i++)
??????????? sum *= x;

????? return sum;
}

void Hannuota(st ta[], long max)
{
????? int k = 0; //累計(jì)移動(dòng)的次數(shù)
????? int i = 0;
????? int ch;
????? while (k < max)
????? {
??????????? //按順時(shí)針方向把圓盤1從現(xiàn)在的柱子移動(dòng)到下一根柱子
??????????? ch = ta[i%3].Pop();
??????????? ta[(i+1)%3].Push(ch);
??????????? cout << ++k << ": " << "Move disk " << ch << " from " << ta[i%3].name << " to " << ta[(i+1)%3].name << endl;
??????????? i++;
??????????? //把另外兩根柱子上可以移動(dòng)的圓盤移動(dòng)到新的柱子上
??????????? if (k < max)
??????????? {???? //把非空柱子上的圓盤移動(dòng)到空柱子上,當(dāng)兩根柱子都為空時(shí),移動(dòng)較小的圓盤
????????????????? if (ta[(i+1)%3].Top() == 0 || ta[(i-1)%3].Top() > 0 && ta[(i+1)%3].Top() > ta[(i-1)%3].Top())
????????????????? {
??????????????????????? ch =? ta[(i-1)%3].Pop();
??????????????????????? ta[(i+1)%3].Push(ch);
??????????????????????? cout << ++k << ": " << "Move disk " << ch << " from " << ta[(i-1)%3].name << " to " << ta[(i+1)%3].name << endl;
????????????????? }
????????????????? else
????????????????? {
??????????????????????? ch =? ta[(i+1)%3].Pop();
??????????????????????? ta[(i-1)%3].Push(ch);
??????????????????????? cout << ++k << ": " << "Move disk " << ch << " from " << ta[(i+1)%3].name << " to " << ta[(i-1)%3].name << endl;
????????????????? }
??????????? }
????? }
}

?

Posted on 2006-06-07 18:00 夢(mèng)想飛揚(yáng) 閱讀(6618) 評(píng)論(4)  編輯 收藏 引用

Feedback

# re: 漢諾塔非遞歸算法  回復(fù)  更多評(píng)論   

2006-06-11 18:31 by glacjay
嗯,以前在哪本數(shù)學(xué)書上看到過。

# re: 漢諾塔非遞歸算法  回復(fù)  更多評(píng)論   

2006-06-12 11:00 by Jacky
更正一下,在移動(dòng)步驟(2)中,應(yīng)該是當(dāng)兩個(gè)柱子都非空的時(shí)候才移動(dòng)較小的圓盤。

# re: 漢諾塔非遞歸算法  回復(fù)  更多評(píng)論   

2007-09-20 15:06 by mfkxowvfp
能給出具體的理論驗(yàn)證嗎?

# re: 漢諾塔非遞歸算法  回復(fù)  更多評(píng)論   

2007-11-07 12:45 by 壽桃用戶入境
疆景頗產(chǎn)

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            米奇777超碰欧美日韩亚洲| 欧美激情片在线观看| 麻豆av福利av久久av| 久久国产精品毛片| 久久国产视频网| 欧美成人精品激情在线观看| 欧美大片在线看免费观看| 亚洲国产成人久久综合| 欧美高清在线观看| 日韩午夜电影av| 亚洲女人天堂成人av在线| 欧美一区2区三区4区公司二百| 久久精品国产成人| 欧美国产日韩在线| 国产区亚洲区欧美区| 亚洲欧洲在线观看| 午夜精品久久久久久久久久久久| 久久蜜桃精品| 亚洲精品视频在线播放| 亚洲综合99| 免费在线欧美视频| 国产精品揄拍500视频| 亚洲韩国一区二区三区| 亚洲一卡久久| 欧美激情免费在线| 午夜精品短视频| 欧美激情第8页| 国产字幕视频一区二区| 中文国产成人精品久久一| 久久久久久久久久码影片| 亚洲人成网站在线播| 亚洲欧美日韩人成在线播放| 欧美高潮视频| 欧美乱大交xxxxx| 欧美粗暴jizz性欧美20| 亚洲免费在线精品一区| 久久精品国产久精国产一老狼 | 午夜精品视频一区| 欧美丰满高潮xxxx喷水动漫| 国产一区二区三区在线观看网站| 99一区二区| 欧美国产日韩精品免费观看| 欧美影院视频| 国产精品日韩欧美| 亚洲特级片在线| 亚洲高清不卡av| 久久精品毛片| 国产字幕视频一区二区| 欧美一区免费视频| 亚洲网址在线| 国产精品多人| 亚洲性av在线| 一道本一区二区| 欧美日韩国产综合一区二区| 亚洲乱码国产乱码精品精| 牛人盗摄一区二区三区视频| 久久国产免费看| 国产一在线精品一区在线观看| 午夜精品视频在线| 亚洲男女毛片无遮挡| 国产精品久久久久一区二区三区共| 日韩视频在线观看免费| 亚洲经典在线| 欧美日韩极品在线观看一区| 日韩系列在线| 日韩视频中文| 国产精品国产三级国产aⅴ入口| 亚洲视频综合在线| 亚洲无线一线二线三线区别av| 国产精品啊啊啊| 亚洲欧美视频一区二区三区| 午夜精品久久久久久久99樱桃| 国产精品美女www爽爽爽| 午夜国产精品影院在线观看| 亚洲欧美视频在线| 影视先锋久久| 亚洲黄色精品| 国产精品高潮视频| 久久精品国产精品亚洲综合| 久久午夜国产精品| 一区二区三区国产精华| 亚洲永久视频| 伊人夜夜躁av伊人久久| 亚洲国产精品成人综合色在线婷婷| 欧美激情按摩| 欧美一区亚洲| 美日韩丰满少妇在线观看| 在线亚洲高清视频| 欧美在线视频全部完| 亚洲激情自拍| 亚洲欧美日韩精品在线| 狠狠色丁香婷综合久久| 久久精品视频一| 91久久精品国产91性色tv| 99国产成+人+综合+亚洲欧美| 国产精品一区二区在线观看不卡| 久久永久免费| 欧美午夜在线一二页| 久热精品在线| 国产精品成人午夜| 欧美不卡在线视频| 国产精品女人久久久久久| 欧美国产第一页| 国产日韩精品一区| 亚洲精品婷婷| 亚洲韩国日本中文字幕| 欧美一区午夜精品| 一区二区三区高清| 老司机亚洲精品| 欧美在线啊v| 欧美三级不卡| 亚洲国产高清aⅴ视频| 国产一区二区视频在线观看| 亚洲国内精品在线| 亚洲高清免费视频| 欧美亚洲一区二区三区| 亚洲性感美女99在线| 欧美二区在线播放| 裸体一区二区三区| 国产视频一区在线| 亚洲伊人网站| 亚洲欧美精品在线| 国产精品美女黄网| 一区二区三区av| 中文av字幕一区| 欧美精品在线播放| 亚洲国产精品福利| 亚洲国产99| 久久综合99re88久久爱| 久久久久久色| 韩国自拍一区| 久久久精品2019中文字幕神马| 久久av一区二区三区| 国产精品一区二区在线观看不卡| 这里只有精品视频| 亚洲欧美国产精品专区久久| 欧美日韩妖精视频| 一区二区免费在线观看| 亚洲一区二区三区久久| 欧美日韩一区二区视频在线| 亚洲精品美女在线观看| 夜夜嗨av一区二区三区四区| 欧美伦理在线观看| 一区二区三区国产精华| 亚洲综合日韩在线| 国产人久久人人人人爽| 久久精品久久综合| 欧美激情一区在线观看| 亚洲精品一二区| 欧美日韩在线大尺度| 亚洲一区二区三区在线| 久久久久久久999精品视频| 影音欧美亚洲| 欧美精品二区| 久久香蕉国产线看观看av| 国产欧美日韩专区发布| 久久大逼视频| 亚洲激情在线播放| 亚洲女同性videos| 欧美大秀在线观看| 欧美在线视频一区二区三区| 狠狠色2019综合网| 久久中文精品| 日韩视频在线观看| 欧美在线视频不卡| 亚洲第一在线视频| 欧美日韩美女在线| 久久av资源网| 亚洲欧洲综合另类在线| 午夜精品久久久久久久蜜桃app| 国产综合精品一区| 欧美精品999| 欧美亚洲一区二区在线| 欧美激情按摩在线| 性8sex亚洲区入口| 亚洲激情一区| 国产视频一区在线观看| 欧美不卡视频一区| 先锋影音国产一区| 亚洲裸体俱乐部裸体舞表演av| 久久久www成人免费毛片麻豆| 99成人免费视频| 在线观看日韩国产| 国产乱码精品1区2区3区| 欧美国产精品中文字幕| 久久高清免费观看| 亚洲一区二区三区激情| 亚洲娇小video精品| 免费久久久一本精品久久区| 亚洲欧美中文在线视频| 亚洲老板91色精品久久| 精品成人免费| 国产一区二区三区久久 | 老司机免费视频久久| 亚洲自拍三区| aa级大片欧美三级| 亚洲日本中文字幕区| 激情五月婷婷综合| 国产一区二区在线免费观看| 国产精品黄视频|