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

隨筆 - 70  文章 - 160  trackbacks - 0

公告:
知識(shí)共享許可協(xié)議
本博客采用知識(shí)共享署名 2.5 中國(guó)大陸許可協(xié)議進(jìn)行許可。本博客版權(quán)歸作者所有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意不得隨機(jī)刪除文章任何內(nèi)容,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。 具體操作方式可參考此處。如您有任何疑問(wèn)或者授權(quán)方面的協(xié)商,請(qǐng)給我留言。

常用鏈接

留言簿(8)

隨筆檔案

文章檔案

搜索

  •  

積分與排名

  • 積分 - 180368
  • 排名 - 147

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

軟件課講了這些問(wèn)題,這次順便總結(jié)下。

 說(shuō)白了也就是:遞歸,回溯,深搜或者廣搜。 

 1.漢諾塔 

 ////////////////////////////////////////////////
/*
漢諾塔
題目:
假設(shè)有A, B, C 3個(gè)軸,有n個(gè)直徑各不相同,
從小到大依次編號(hào)為1,2,3,…,n的圓盤(pán)
按照從小到大的順序疊放在A軸上。現(xiàn)在要求
將這n個(gè)圓盤(pán)移至C軸上并仍然按照同樣順序
疊放,但圓盤(pán)移動(dòng)時(shí)必須遵守下列規(guī)則:
1.每次只能移動(dòng)一個(gè)圓盤(pán),它必須位于某個(gè)
  軸的頂部。
2.圓盤(pán)可以插在A,B,C中任一軸上。
3.任何時(shí)刻都不能將一個(gè)較大的圓盤(pán)壓在較小
  的圓盤(pán)之上。
*/
/////////////////////////////////////////////// 

經(jīng)典的問(wèn)題,屬于遞歸的入門(mén)級(jí)問(wèn)題,但是同樣不好分析,在n<=4以?xún)?nèi)還可以模擬下漢諾塔的實(shí)現(xiàn),當(dāng)n>=5時(shí)就不太現(xiàn)實(shí)了,讓我們來(lái)看看漢諾塔當(dāng)圓盤(pán)個(gè)數(shù)n時(shí)有多少組解? 按照傳說(shuō)來(lái)看:n=64,當(dāng)所有的金片都從梵天穿好的那根針上移到另外一根針上時(shí),世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸于盡。 

 但是這畢竟是神話(huà),不過(guò)當(dāng)把64個(gè)金片全部放到另外一根針時(shí),確實(shí)要很長(zhǎng)很長(zhǎng)一段時(shí)間。 
讓我們來(lái)看看需要多長(zhǎng)時(shí)間。 
 首先,我們找出遞推關(guān)系: 
 f(n + 1) = 2*f(n) + 1 
 至于這個(gè)怎么得到的可以畫(huà)圖看看。 
 把遞推關(guān)系算出來(lái)后,也就是: 
 f(n) = 2^n-1 
 那么當(dāng)n=64時(shí),是多少? 
 f(64)= 2^64-1=18446744073709551615   
假如每秒鐘一次,共需多長(zhǎng)時(shí)間呢?一年大約有 31536926 秒,計(jì)算表明移完這些金片需要5800多億年,比地球壽命還要長(zhǎng),事實(shí)上,世界、梵塔、廟宇和眾生都已經(jīng)灰飛煙滅。 

好吧,說(shuō)了那么多,還是步入正題。
漢諾塔的實(shí)現(xiàn)有遞歸和非遞歸兩種情況,遞歸的很常見(jiàn),也很簡(jiǎn)單,非遞歸實(shí)際上就是二叉樹(shù)的中序遍歷。也可以認(rèn)為是棧的實(shí)現(xiàn)。
遞歸的版本:
/*遞歸實(shí)現(xiàn)*/
#include 
<iostream>
using namespace std;
 
//把n號(hào)圓盤(pán)從x移到y(tǒng),并打印出。
void Move(int n, char x, char y)
{
  cout
<< "" << n << "號(hào)圓盤(pán)從" << x << "移動(dòng)到" << y << endl;
}
 
//把前n個(gè)通過(guò)b從a移到c
void Hanoi(int n, char a, char b, char c)  
{
    
if(n == 1)
        Move(
1, a, c);
    
else
    {
        Hanoi(n
-1, a, c, b);
        Move(n, a, c);
        Hanoi(n
-1, b, a, c);
    }
}
 
int main()
{
    
int n;
    cout 
<< "輸入n的大小: ";
    cin 
>> n;
    Hanoi(n, 
'a''b''c');
    cout 
<< "Ok!" << endl << "By Tanky Woo." << endl;
    
return 0;
}

非遞歸的版本有時(shí)間再補(bǔ)上。


2.n皇后
對(duì)于每一個(gè)ACMer,八皇后問(wèn)題都是必經(jīng)之路。

 作為搜索類(lèi)題目還是老問(wèn)題: 

 1.邊界條件。 
 2.對(duì)每種情況都得遍歷到,可以用解答樹(shù)分析。 
 3.剪枝 http://www.wutianqi.com/?p=1341(搜索與剪枝)
 4.輔助空間的變化。回溯前和回溯后的變化。 
 如果不用輔助空間的回溯當(dāng)然就不需要注意輔助空間的問(wèn)題了。 

以下是n皇后的源碼: 

/*
*  n皇后問(wèn)題
*  Tanky Woo
*/
 
#include 
<iostream>
using namespace std;
 
int queen[100];
int n;         // n皇后
int tot = 0;   //解法種數(shù)
 
// www.wutianqi.com
void search(int cur)
{
    
if(cur == n)   //遞歸邊界。符合要求,輸出。
    {
        tot
++;
        
for(int i=0; i<n; ++i)
            cout 
<< queen[i] << " ";
        cout 
<< endl;
    }
    
else
    {
        
for(int i=0; i<n; ++i)
        {
            
bool flag = 1;
            queen[cur] 
= i;    // 嘗試把第cur行的皇后放在第i列
            for(int j=0; j<cur; ++j)    // 檢查是否和前面的皇后沖突
                if(queen[cur] == queen[j]        // 同一列
                || cur-queen[cur] == j-queen[j]    // 正對(duì)角線(xiàn)
                || cur+queen[cur] == j+queen[j])   // 反對(duì)角線(xiàn)
                {
                    flag 
= 0;
                    
break;
                }
            
if(flag)
                search(cur
+1);    // 如果合法,繼續(xù)
        }
    }
}
 
int main()
{
    cout 
<< "輸入皇后個(gè)數(shù)n: ";
    cin 
>> n;
    search(
0);
    cout 
<< "共有" << tot << "種解." << endl << "By Tanky Woo." << endl;
    
return 0;
}

對(duì)于這個(gè)問(wèn)題,還可以用輔助空間來(lái)提高算法的效率: 增加輔助空間vis[][]來(lái)判斷是否有其他皇后已經(jīng)在列和對(duì)角線(xiàn)上。 
#include <iostream>
using namespace std;
 
int queen[100];
int n;         // n皇后
int tot = 0;   //解法種數(shù)
 
 
int vis[3][100];   // 輔助空間
void search(int cur)
{
    
if(cur == n)   //遞歸邊界。符合要求,輸出。
    {
        tot
++;
        
for(int i=0; i<n; ++i)
            cout 
<< queen[i] << " ";
        cout 
<< endl;
    }
    
else
    {
        
for(int i=0; i<n; ++i)
        {
            
if(!vis[0][i] && !vis[1][cur+i] && !vis[2][cur-i+n])
            {
                queen[cur] 
= i;
                vis[
0][i] = vis[1][cur+i] = vis[2][cur-i+n] = 1;
                search(cur
+1);
                vis[
0][i] = vis[1][cur+i] = vis[2][cur-i+n] = 0;  //記住要變化來(lái)
            }
        }
    }
}
 
 
int main()
{
    memset(vis, 
0sizeof(vis));
    cout 
<< "輸入皇后個(gè)數(shù)n: ";
    cin 
>> n;
    search(
0);
    cout 
<< "共有" << tot << "種解." << endl << "By Tanky Woo." << endl;
    
return 0;
}


3.跳馬問(wèn)題: 
據(jù)說(shuō)此題證明可以用組合數(shù)學(xué)中的哈密頓環(huán)。
組合數(shù)學(xué)確實(shí)博大精深,看過(guò)一段時(shí)間的組合數(shù)學(xué),感覺(jué)和實(shí)際聯(lián)系的很多,Orz.
此題有兩種版本: 

 ①:給定一個(gè)N*N的棋盤(pán),起始點(diǎn)在(0,0)處,要求求出有多少種方法,可以不重復(fù)的遍歷棋盤(pán)上所有的點(diǎn)。 
   規(guī)則:1.馬走日字
           2.走過(guò)的點(diǎn)就不能再走了 

 此題和上面的n皇后類(lèi)似,是標(biāo)準(zhǔn)的DFS。 
分析:從起始點(diǎn)開(kāi)始,每次遍歷八種方向,直到邊界條件,并輸出。 

以下是跳馬問(wèn)題一的源碼:

/*馬跳棋盤(pán)問(wèn)題*/
 
#include 
<iostream>
using namespace std;
const int N = 10;
int a[N][N] = {0};
int cnt = 0;
 
void Horse(int a, int b, int t);
// www.wutianqi.com
int main()
{
    
int i = 0, j = 0, t = 1;
    a[i][j] 
= t;
    Horse(i, j, step
+1);
    cout 
<< cnt << endl;
    cout 
<< "By Tanky Woo.\n";
    
return 0;
}
void Horse(int a, int b, int t)
{

    int x[4={-2-112}, y[4= {-2-112};  
    
if(t == N*N+1)  
        cnt
++;
 
    
for(int i=0; i<4++i)
        
for(int j=0; j<4++j)
        {
            
if(x[i]==y[j] || x[i]==-y[j])  
                continue;
            
if(a+x[i]>=0 && a+x[i]<&& b+y[j]>=0 && b+y[j]<&& board[a+x[i]][b+y[j]]==0)
            {
                a[a
+x[i]][b+y[j]] = t;
                Horse(a
+x[i], b+y[j], t+1);
                a[a
+x[i]][b+y[j]] = 0;
            }
        }
}
 


第二個(gè)版本: ②:設(shè)有右圖所示的一個(gè)棋盤(pán),在棋盤(pán)上的A點(diǎn),有一個(gè)中國(guó)象棋的馬,并約定馬走的規(guī)則:
規(guī)則:1. 馬走日字
        2. 馬只能向右走。
試找出所有從A到B的途徑。 
  

此題也是OI上很有名的騎士問(wèn)題。
此題似乎比較適合BFS. 
還沒(méi)嘗試過(guò)。 
 


 
讓我再想想,好像還有八數(shù)碼和素?cái)?shù)環(huán)問(wèn)題沒(méi)寫(xiě)。
不過(guò)在HDOJ上遇到過(guò)一個(gè)素?cái)?shù)環(huán)的題目:
http://www.wutianqi.com/?p=1329
有興趣可以做下。

對(duì)于DFS和BFS更多的題目,可以在我博客右上角搜索欄里輸入DFS或BFS,會(huì)出來(lái)相應(yīng)題目。  

posted on 2010-09-30 15:24 Tanky Woo 閱讀(2552) 評(píng)論(2)  編輯 收藏 引用

FeedBack:
# re: 漢諾塔,n皇后,跳馬問(wèn)題匯總 2010-10-07 12:24 popeer
hanoi的遞歸實(shí)現(xiàn)越搬號(hào)大的圓盤(pán),越是費(fèi)時(shí)間。

我用程序試過(guò)了,從是把1,2,3,4這樣的小號(hào)翻來(lái)覆去的搬家,遞歸真苦惱。  回復(fù)  更多評(píng)論
  
# re: 漢諾塔,n皇后,跳馬問(wèn)題匯總[未登錄](méi) 2010-10-07 12:49 Tanky Woo
@popeer
對(duì)。嚴(yán)蔚敏的《數(shù)據(jù)結(jié)構(gòu)》上好像有對(duì)n=4的模擬,似乎要10多步還是20步。反正挺多的。
當(dāng)n>=5基本就很難模擬了,中間出錯(cuò)一步全部就白費(fèi)了。

遞歸這種東西找的是相對(duì)關(guān)系,不要多想,否則會(huì)越想越糊涂。  回復(fù)  更多評(píng)論
  

只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   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>
              亚洲欧洲在线播放| 欧美区一区二| 欧美一区日本一区韩国一区| 欧美四级伦理在线| 欧美成人久久| 久久精品一区二区三区四区| 一区二区三区免费看| 欧美电影在线观看完整版| 久久久久国产精品一区三寸| 亚洲永久精品大片| 一区二区三区欧美视频| 日韩视频免费| 一本高清dvd不卡在线观看| 国产欧美日韩激情| 国产精品爽爽爽| 国产精品系列在线| 国产私拍一区| 国产亚洲欧洲一区高清在线观看 | 欧美日韩999| 久久男人av资源网站| 欧美亚洲三区| 久久综合国产精品| 欧美激情综合五月色丁香| 亚洲承认在线| 久久亚洲春色中文字幕| 亚洲欧美日韩国产中文在线| 亚洲图片激情小说| 亚洲欧美综合网| 久久www成人_看片免费不卡| 狂野欧美激情性xxxx| 欧美精品偷拍| 国产亚洲人成a一在线v站| 一区二区三区我不卡| 99在线热播精品免费99热| 亚洲第一伊人| 一区二区成人精品| 久久久国产91| 亚洲精品专区| 亚洲欧美日韩久久精品| 亚洲欧美日韩国产成人精品影院| 欧美一区二粉嫩精品国产一线天| 狂野欧美激情性xxxx欧美| 国产精品成人观看视频免费| 国内精品嫩模av私拍在线观看| 一区在线视频观看| 一本到12不卡视频在线dvd| 亚洲视频在线观看| 老鸭窝毛片一区二区三区| 亚洲三级性片| 久久久久久色| 毛片基地黄久久久久久天堂| 国产精品盗摄一区二区三区| 欧美精品七区| 黄色成人小视频| 亚洲欧美日韩成人高清在线一区| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲精品影院| 久久综合久久88| 亚洲尤物视频在线| 欧美区在线观看| 一区二区三区在线免费视频| 久久天天躁狠狠躁夜夜av| 欧美日韩专区在线| 中国日韩欧美久久久久久久久| 亚洲精品一区久久久久久| 欧美丰满高潮xxxx喷水动漫| 在线日韩av片| 亚洲人永久免费| 欧美日韩在线观看一区二区| 亚洲午夜激情| 亚洲欧美在线x视频| 国产亚洲成精品久久| 久热国产精品视频| 蜜臀av国产精品久久久久| 日韩视频免费在线观看| 艳女tv在线观看国产一区| 国产精品日韩欧美一区二区三区 | 欧美亚洲一区三区| 午夜精品国产精品大乳美女| 国内精品久久久久久久影视麻豆| 老司机精品久久| 欧美激情91| 午夜精品婷婷| 亚洲福利久久| 91久久黄色| 国产精品高潮久久| 久久久亚洲欧洲日产国码αv| 久久一综合视频| 在线视频日韩| 一本不卡影院| 亚洲影院色无极综合| 狠狠色综合播放一区二区| 欧美激情a∨在线视频播放| 欧美日本三级| 久久一区二区三区av| 欧美日韩国产探花| 久久久久久久激情视频| 欧美电影美腿模特1979在线看| 性欧美暴力猛交69hd| 免费观看国产成人| 午夜影视日本亚洲欧洲精品| 欧美mv日韩mv亚洲| 亚洲免费影视第一页| 久久亚洲精品一区| 午夜一区不卡| 欧美伦理影院| 欧美高清视频一区二区三区在线观看 | 亚洲专区欧美专区| 欧美在线看片| 午夜视频在线观看一区二区三区| 麻豆freexxxx性91精品| 小黄鸭精品aⅴ导航网站入口| 亚洲女人天堂av| 悠悠资源网亚洲青| 夜夜嗨一区二区| 91久久精品国产91久久性色| 欧美一级艳片视频免费观看| 中国女人久久久| 欧美黄色一区| 欧美激情一区二区三区全黄 | 艳女tv在线观看国产一区| 久久不射电影网| 午夜精品久久久久久久| 欧美裸体一区二区三区| 欧美电影美腿模特1979在线看| 国产三级精品三级| 亚洲影视综合| 午夜一区二区三区在线观看| 欧美日韩国产综合新一区| 91久久精品美女高潮| 亚洲黄色成人网| 巨乳诱惑日韩免费av| 久久综合给合| 一区精品在线| 毛片一区二区三区| 欧美高清一区二区| 亚洲黄色精品| 欧美片在线播放| 9色国产精品| 亚洲欧美日本另类| 国产精品网曝门| 午夜精品久久一牛影视| 欧美一区成人| 好吊日精品视频| 久久精品女人天堂| 免费亚洲电影在线| 日韩午夜中文字幕| 欧美网站在线| 香港久久久电影| 久久综合色88| 99精品视频免费全部在线| 欧美日韩国产在线播放网站| 亚洲午夜精品17c| 久久精品夜色噜噜亚洲a∨ | 久久精品导航| 在线观看日韩精品| 欧美激情国产日韩精品一区18| 亚洲精品国产精品国自产在线| 99国产精品久久久久久久| 国产精品久久久久久久浪潮网站| 亚洲欧美日本国产有色| 久久久久天天天天| 最新国产の精品合集bt伙计| 欧美日韩国产精品专区| 亚洲一区二区三区色| 久久综合久久综合九色| 一区二区三区产品免费精品久久75 | 免费高清在线一区| 99国产精品久久久久久久久久| 亚洲一级在线| 欧美三区在线视频| 一区二区三区高清视频在线观看| 欧美在线啊v一区| 亚洲国产cao| 国产精品高潮呻吟视频| 久久久在线视频| 亚洲桃花岛网站| 免费在线播放第一区高清av| 亚洲一级影院| 最新成人av网站| 国产资源精品在线观看| 欧美日韩理论| 男同欧美伦乱| 亚洲欧美日韩另类精品一区二区三区 | 国产精品成人av性教育| 久久精品一区四区| 一区二区三区免费网站| 亚洲高清免费| 美女诱惑黄网站一区| 午夜欧美理论片| 亚洲深夜福利网站| 亚洲人成在线观看网站高清| 国语自产精品视频在线看8查询8 | 夜夜嗨一区二区| 激情伊人五月天久久综合| 国产精品一二三| 欧美色视频日本高清在线观看| 女人色偷偷aa久久天堂| 久久激情五月丁香伊人| 亚洲一区自拍|