亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 騎士遍歷2.c

?? 有許多算法代碼 如順序表
?? C
?? 第 1 頁 / 共 2 頁
字號:
求解騎士游歷問題 
顯然求解騎士游歷問題的每一步就是馬在棋盤上走的一步。在每一步馬需要選擇一個方向進(jìn)行游歷,這時記住解的每一步需要記住兩件事: 
1.當(dāng)前步的行列位置 
2.當(dāng)前步已經(jīng)試探過哪些方向了,以便回溯回來時能夠選擇一個新的方向進(jìn)行試探 
所以使用兩個數(shù)組,數(shù)組board記住棋盤的每個位置是在馬的第幾步到達(dá)的,這反映了問題的解,即第幾步到哪個位置。數(shù)組direction記住在棋盤的某個位置已經(jīng)試探過的方向,每個位置有八個方向,可按某種順序?qū)Π藗€方向編號,然后在每個位置按編號順序試探方向。 
在確定數(shù)據(jù)結(jié)構(gòu)之后,同樣需要確定下面幾個問題: 
1.怎樣的狀態(tài)是初始狀態(tài)。 
2.怎樣選擇當(dāng)前步可能的路線 
3.怎樣表示向前推進(jìn)一步 
4.怎樣回溯及清除當(dāng)前步的痕跡 
顯然初始狀態(tài)是棋盤的每個位置都置為第0步到達(dá)(即還沒有到達(dá)),每個位置都還沒有選擇任何方向(可賦值MAX_DIR(=8)表示沒有選擇方向)。 
選擇當(dāng)前步可能的路線就是在當(dāng)前位置選擇一個方向來游歷下一步。在選擇的時候同樣需要區(qū)分是從第0個方向開始考慮還是從上一次的下一個方向開始考慮。為了方便從下一個方向開始考慮,實際上數(shù)組direction在某一位置(curr_x, curr_y)的值記住的是從上一位置選擇了哪個編號的方向而到達(dá)的,這樣容易回溯到上一位置,而且容易在回溯到上一位置之后從下個一方向重新試探。 
向前推進(jìn)一步則要根據(jù)所選擇的方向推進(jìn)到下一位置,記住到下一位置所選擇的方向,下一位置是第幾步到達(dá)的,然后增加步數(shù)。 
回溯一步則要標(biāo)記當(dāng)前位置沒有到達(dá)過(將到達(dá)的步數(shù)置為0),根據(jù)上一步到當(dāng)前位置的所選擇的方向(這個方向是記錄當(dāng)前位置所對應(yīng)的direction數(shù)組中)而回溯到上一位置,然后減少步數(shù)。 
下面程序用類KNIGHT來封裝數(shù)組board、direction、當(dāng)前位置(curr_x, curr_y)、當(dāng)前步數(shù)(step),并且使用last_direction來記住上一位置到當(dāng)前位置所選擇的方向。為了方便計算選擇一個方向后從當(dāng)前推進(jìn)到下一位置,使用數(shù)組var_x和var_y來記住每個方向在x方向和y方向的改變值。這個類中提供的方法的含義與類QUEEN類似。為節(jié)省篇幅起見,我們將類的界面、實現(xiàn)及演示放在了同一文件。

///////////////////////////////////////////////////////////////////////
程序二:求解騎士游歷問題的程序 

// 文件:KNIGHT.CPP 
// 功能:使用回溯算法求解騎士游歷問題
#include <iostream.h> 
#include <iomanip.h> 
enum BOOLEAN { 
TRUE = 1, 
FALSE = 0 
}; 
const int MAX_WIDTH = 30; 
const int MAX_DIR = 8; 
class KNIGHT { 
public: 
// FUNCTION: 設(shè)置初始狀態(tài) 
KNIGHT(int width); 
// FUNCTION: 用比較直觀的方式打印問題的解 
// REQUIRE: 必須先調(diào)用了成員函數(shù)tourist() 
void print(); 
// FUCTION: 根據(jù)馬的起始位置(start_x, start_y)使用回溯算法求騎士游歷問題的一個解 
// REQUIRE: (start_x, start_y)必需在所設(shè)置的棋盤寬度范圍內(nèi) 
BOOLEAN tourist(int start_x, int start_y); 
protected: 
// FUNCTION: 初始化記錄所選方向的數(shù)組,將每個值置為MAX_DIR 
void init_direction(); 
// FUNCTION: 初始化記錄馬在第幾步到位每個位置的數(shù)組,將每個值置為0 
void init_chessboard(); 
// FUNCTION: 設(shè)置初始狀態(tài),包括初始化方向數(shù)組和棋盤數(shù)組,并設(shè)置馬的初始位置 
void set_start(int x, int y); 
// FUNCTION: 在當(dāng)前位置選擇一個方向以推進(jìn)到下一位置 
// RETURN: 如果可選擇一個方向推進(jìn)則返回TRUE,否則返回FALSE 
// NOTE: 將該函數(shù)定義為虛函數(shù),以便下面快速游歷的類來重定義該函數(shù)而產(chǎn)生動態(tài)綁定 
virtual BOOLEAN select_direction(); 
// FUNCTION: 從當(dāng)前位置回溯到上一位置 
// NOTE: 將該函數(shù)定義為虛函數(shù),以便下面快速游歷的類來重定義該函數(shù)而產(chǎn)生動態(tài)綁定 
virtual void backward(); 
// FUNCTION: 從當(dāng)前位置推進(jìn)到下一位置 
// NOTE: 將該函數(shù)定義為虛函數(shù),以便下面快速游歷的類來重定義該函數(shù)而產(chǎn)生動態(tài)綁定 
virtual void forward(); 
// FUNCTION: 判斷馬是否能夠走向位置(x, y)。 
// RETURN: 如果馬已經(jīng)到過該位置,或該位置超出棋盤范圍返回FALSE,否則返回TRUE 
BOOLEAN is_legal(int x, int y); 
// FUNCTION: 判斷是否回溯到初始狀態(tài) 
// RETURN: 如果步數(shù)回到第1步則表示回到初始狀態(tài)而返回TRUE,否則返回FALSE 
BOOLEAN back_to_start(); 
// FUNCTION: 判斷是否游歷完所有位置 
// RETURN: 如果步數(shù)等于棋盤格子數(shù)則表示游歷完所有位置而返回TRUE,否則返回FALSE 
BOOLEAN is_end(); 
// 下面兩個數(shù)組用來記住選擇某個方向后,推進(jìn)到下一位置時x方向和y方向的值的變化 
int var_x[MAX_DIR]; 
int var_y[MAX_DIR]; 
// 記錄馬第幾步到達(dá)某個位置的棋盤數(shù)組 
int chessboard[MAX_WIDTH][MAX_WIDTH]; 
// 記錄馬在某個位置是在上一位置選擇第幾個方向到達(dá)的 
int direction[MAX_WIDTH][MAX_WIDTH]; 
int width; // 棋盤寬度 
int curr_x, curr_y; // 馬的當(dāng)前位置 
int step; // 已經(jīng)游歷的步數(shù) 
int last_direct
ion; // 上一位置到當(dāng)前位置所選的方向 
}; 
KNIGHT::KNIGHT(int width) 
{ 
this->width = width; 
init_direction(); 
total_step = 0; 
} 
void KNIGHT::print() 
{ 
int x, y; 
cout << " +"; 
for (x = 0; x < width; x = x + 1) cout << "----+"; 
cout << '\n'; 
for (x = 0; x < width; x = x + 1) { 
cout << " |"; 
for (y = 0; y < width; y = y + 1) cout << setw(3) << chessboard[x][y] << " |"; 
cout << '\n'; 
cout << " +"; 
for (y = 0; y < width; y = y + 1) cout << "----+"; 
cout << '\n'; 
} 
} 
BOOLEAN KNIGHT::is_legal(int x, int y) 
{ 
if (x < 0 || x >= width) return FALSE; 
if (y < 0 || y >= width) return FALSE; 
if (chessboard[x][y] > 0) return FALSE; 
return TRUE; 
} 
BOOLEAN KNIGHT::back_to_start() 
{ 
if (step == 1) return TRUE; 
else return FALSE; 
} 
BOOLEAN KNIGHT::is_end() 
{ 
if (step > width * width) return TRUE; 
else return FALSE; 
} 
void KNIGHT::set_start(int x, int y) 
{ 
curr_x = x; curr_y = y; step = 1; 
chessboard[x][y] = step; step = step + 1; 
direction[x][y] = MAX_DIR; 
last_direction = MAX_DIR; 
} 
BOOLEAN KNIGHT::select_direction() 
{ 
int try_x, try_y; 
// last_direction為MAX_DIR表示當(dāng)前位置是一個新的位置,在新推進(jìn)到某個位置(curr_x, curr_y)時, 
// direction[curr_x][curr_y]會記錄上一位置到(curr_x, curr_y)時所選擇的方向,這時 
// last_direction置為MAX_DIR用來標(biāo)記該位置是新推進(jìn)的位置。 
if (last_direction == MAX_DIR) last_direction = 0; 
else last_direction = last_direction + 1; 
while (last_direction < MAX_DIR) { 
// 看下一步推進(jìn)到哪個位置是合法的,如果合法則選擇該方向。 
try_x = curr_x + var_x[last_direction]; 
try_y = curr_y + var_y[last_direction]; 
if (is_legal(try_x, try_y)) break; 
last_direction = last_direction + 1; 
} 
if (last_direction == MAX_DIR) return FALSE; 
else return TRUE; 
} 
void KNIGHT::backward() 
{ 
step = step - 1; 
chessboard[curr_x][curr_y] = 0; 
// 將last_direction置為上一位置到(curr_x, curr_y)所選擇的方向 
last_direction = direction[curr_x][curr_y]; 
// 根據(jù)這個方向回溯到上一位置,同時回溯到上一位置之后,在上一位置再試探時應(yīng)該從 
// last_direction+1的方向開始。參看成員函數(shù)select_direction()。 
curr_x = curr_x - var_x[last_direction]; 
curr_y = curr_y - var_y[last_direction]; 
} 
void KNIGHT::forward() 
{ 
// 在推進(jìn)時last_direction是當(dāng)前位置所選擇的方向 
curr_x = curr_x + var_x[last_direction]; 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品一二三| 精品国产乱码久久久久久老虎| 欧美一二三四区在线| 夜夜嗨av一区二区三区中文字幕| 国产精品影视在线观看| 日韩精品一区在线观看| 久久99在线观看| 国产日韩欧美综合在线| 奇米精品一区二区三区在线观看 | 国产精品福利影院| 国产精品888| 日韩在线卡一卡二| 欧美放荡的少妇| 午夜国产精品影院在线观看| 欧美一区二区三区白人| 麻豆国产精品777777在线| 亚洲婷婷在线视频| 欧美三级电影在线观看| 午夜精品国产更新| 亚洲激情自拍偷拍| 日韩午夜电影在线观看| 欧洲一区在线观看| 午夜精品福利久久久| 亚洲女与黑人做爰| 欧美美女一区二区在线观看| 91视频免费观看| 亚洲激情在线激情| 国产精品免费久久| 欧美日本在线看| 国产伦精品一区二区三区免费迷| 欧美国产成人在线| 欧美日韩中文字幕一区二区| 99re热这里只有精品免费视频| 亚洲一区欧美一区| 精品日韩一区二区| 91污在线观看| 91麻豆文化传媒在线观看| 国产成人精品免费在线| 亚洲成a人v欧美综合天堂| 日韩一区二区免费电影| 欧美久久一二区| 91精品婷婷国产综合久久性色| 狠狠色狠狠色合久久伊人| 亚洲免费三区一区二区| 亚洲欧洲av另类| 精品免费国产二区三区| 精品国产人成亚洲区| 久久午夜色播影院免费高清| 在线观看一区二区精品视频| 色哦色哦哦色天天综合| 精品一区中文字幕| 亚洲成a人片综合在线| 亚洲va天堂va国产va久| 视频在线观看一区| 男女男精品视频网| 精品一区二区三区免费毛片爱| 狠狠色狠狠色综合| 本田岬高潮一区二区三区| 视频一区二区三区中文字幕| 日本va欧美va欧美va精品| 免费视频最近日韩| 国产成人高清在线| 91欧美一区二区| 欧美精品色一区二区三区| 精品少妇一区二区三区视频免付费| 久久理论电影网| 日韩女优av电影| 国产拍欧美日韩视频二区| 中文字幕一区二区三区色视频| 一区二区三区四区不卡视频| 日韩国产一二三区| 亚洲电影视频在线| 麻豆精品视频在线观看免费| 国产盗摄一区二区| 色婷婷亚洲精品| 日韩一卡二卡三卡国产欧美| 国产精品美女视频| 五月婷婷色综合| 东方aⅴ免费观看久久av| 激情欧美一区二区三区在线观看| av在线不卡免费看| 欧美精品电影在线播放| 国产亚洲va综合人人澡精品 | 亚洲欧洲综合另类| 日本欧美一区二区| 99久久99久久综合| 日韩欧美中文字幕一区| 日韩理论片在线| 麻豆免费看一区二区三区| 91天堂素人约啪| 日韩一区二区免费在线观看| 成人欧美一区二区三区小说| 美女视频黄频大全不卡视频在线播放| 粉嫩av一区二区三区粉嫩| 欧美久久高跟鞋激| 亚洲欧美在线视频| 久久97超碰色| 欧美色图免费看| 中文字幕一区二区三区在线播放| 久久精品国产免费| 欧美老肥妇做.爰bbww视频| 国产精品乱码久久久久久| 青青草成人在线观看| 色哟哟国产精品免费观看| 亚洲国产成人自拍| 黄网站免费久久| 欧美精品日日鲁夜夜添| 亚洲美女在线国产| 国产91精品久久久久久久网曝门| 日韩亚洲欧美成人一区| 一二三四区精品视频| www.色精品| 国产欧美日韩精品a在线观看| 日本免费在线视频不卡一不卡二| 在线亚洲精品福利网址导航| 国产日韩av一区| 久久99精品国产.久久久久| 欧美日韩免费电影| 亚洲精品视频观看| 91香蕉视频污| 中文字幕在线观看不卡视频| 国产精品亚洲视频| 久久综合色8888| 国内偷窥港台综合视频在线播放| 3atv一区二区三区| 亚洲成国产人片在线观看| 欧美色图激情小说| 亚洲午夜日本在线观看| 精品一区二区三区影院在线午夜| 制服丝袜在线91| 亚洲va国产天堂va久久en| 欧美在线色视频| 亚洲一区在线观看免费| 在线一区二区观看| 久久影院视频免费| 国产综合久久久久久鬼色| 日韩一区二区电影| 久久 天天综合| 国产午夜亚洲精品午夜鲁丝片 | 亚洲成在人线在线播放| 欧美午夜一区二区| 久久久久国产精品麻豆ai换脸 | 亚洲免费观看在线观看| av亚洲精华国产精华精华 | 国产精品成人在线观看| 91在线观看视频| 亚洲伊人色欲综合网| 欧美日韩一区中文字幕| 石原莉奈在线亚洲三区| 91精品国产入口| 极品尤物av久久免费看| 国产日韩欧美精品一区| av电影在线观看一区| 亚洲综合区在线| 日韩一区和二区| 国产精品亚洲人在线观看| 亚洲视频免费观看| 欧美久久婷婷综合色| 国产一区二区三区四| ●精品国产综合乱码久久久久| 欧美中文字幕一区二区三区亚洲| 日日摸夜夜添夜夜添国产精品| 精品国产凹凸成av人导航| 成人午夜电影久久影院| 精品动漫一区二区三区在线观看| 国产福利一区二区三区| 亚洲欧美日韩系列| 欧美精品丝袜久久久中文字幕| 激情综合网天天干| 国产精品不卡在线| 欧美日韩精品电影| 国产精品一区二区果冻传媒| 成人欧美一区二区三区白人| 欧美日韩精品一区二区在线播放| 国产精品中文有码| 亚洲综合色视频| 国产欧美一区二区三区沐欲| 色噜噜久久综合| 国内精品国产成人| 一区二区免费视频| 欧美精品一区二区精品网| 色婷婷国产精品综合在线观看| 美腿丝袜在线亚洲一区| 亚洲精品综合在线| 久久综合视频网| 欧洲av在线精品| 国产福利电影一区二区三区| 性欧美大战久久久久久久久| 久久精品视频网| 欧美一级片在线看| 色综合网色综合| 亚洲免费伊人电影| 久久午夜老司机| 在线观看91精品国产麻豆| 成人免费视频一区| 麻豆视频一区二区| 午夜精品在线视频一区| 中文字幕一区二区三区色视频| 日韩精品中文字幕一区| 欧美午夜寂寞影院|