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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 騎士遍歷2.c

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

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

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩视频一区在线观看| 日本道精品一区二区三区| 亚洲人精品午夜| 国产农村妇女精品| 欧美极品美女视频| 国产精品乱码一区二区三区软件 | 一区二区在线观看免费视频播放| 久久夜色精品国产欧美乱极品| 日韩视频在线一区二区| xnxx国产精品| 国产三级精品在线| 中文字幕一区二| 亚洲综合激情网| 免费xxxx性欧美18vr| 精品一区二区三区在线播放| 国产乱国产乱300精品| 欧美精品vⅰdeose4hd| 91精品国产91久久久久久一区二区| 日韩一区二区麻豆国产| 久久久五月婷婷| 1024成人网色www| 日韩精品成人一区二区三区| 久久99精品一区二区三区三区| 国产一区二区0| 色综合久久久网| 欧美变态凌虐bdsm| 成人欧美一区二区三区白人| 午夜精品久久久久久| 韩国v欧美v日本v亚洲v| 色先锋久久av资源部| 日韩欧美不卡在线观看视频| 国产精品二三区| 免费一区二区视频| 91色乱码一区二区三区| 欧美日韩黄色影视| 国产精品三级av| 亚洲r级在线视频| 国产不卡在线播放| 欧美一区二区日韩一区二区| **网站欧美大片在线观看| 日韩制服丝袜av| 99久久综合精品| 日韩欧美精品三级| 亚洲精品国产无天堂网2021 | 成人高清免费观看| 制服丝袜日韩国产| 亚洲色图丝袜美腿| 精品一区二区国语对白| 一本大道久久a久久综合婷婷| 日韩欧美国产系列| 亚洲成a人片综合在线| 成人一区二区三区| 久久久久久97三级| 人妖欧美一区二区| 欧美三级电影网站| 亚洲精品视频在线看| 成人午夜免费视频| 欧美精品一区二区三区高清aⅴ| 香蕉加勒比综合久久| 99国产精品99久久久久久| 久久久久久久网| 久99久精品视频免费观看| 56国语精品自产拍在线观看| 一区二区国产视频| 91最新地址在线播放| 国产精品免费免费| 成人av免费网站| 中文字幕巨乱亚洲| 国产成人综合自拍| 国产色综合一区| 大胆欧美人体老妇| 国产精品免费视频观看| 粉嫩av一区二区三区粉嫩| 国产情人综合久久777777| 国产伦精一区二区三区| 久久综合色之久久综合| 国产夫妻精品视频| 久久久久久久av麻豆果冻| 国产成人自拍网| 国产精品国产三级国产有无不卡| 国产一区亚洲一区| 久久久综合网站| 日韩一区二区三区视频| 精品亚洲成a人在线观看| 精品久久人人做人人爰| 久久精品国产亚洲5555| 欧美精品一区二区三区久久久| 国产精品伊人色| 1024成人网| 欧美日韩美少妇| 久久99国内精品| 国产农村妇女精品| 色中色一区二区| 日本欧美一区二区三区乱码| 欧美一区二区三区成人| 国产精品一二二区| 亚洲精选视频免费看| 在线播放中文一区| 国产精品一区二区x88av| 亚洲三级电影网站| 在线成人免费观看| 国产91富婆露脸刺激对白| 亚洲日本中文字幕区| 日韩一区二区视频| 成人午夜在线视频| 三级在线观看一区二区| 国产欧美日韩另类视频免费观看 | 性做久久久久久久免费看| 日韩美女一区二区三区四区| 国产suv一区二区三区88区| 一区二区三区四区乱视频| 日韩一区二区三区视频在线| 成人免费视频免费观看| 日韩精品欧美成人高清一区二区| 国产欧美一二三区| 91精品国产综合久久婷婷香蕉 | 91蜜桃传媒精品久久久一区二区| 亚洲一区在线播放| 国产午夜精品理论片a级大结局| 91传媒视频在线播放| 国产一区二区美女| 亚洲午夜在线视频| 国产精品久久毛片a| 欧美一二三区精品| 91国产丝袜在线播放| 国产高清久久久久| 免费亚洲电影在线| 亚洲国产美女搞黄色| 国产精品久久一卡二卡| 欧美成人伊人久久综合网| 欧美性感一区二区三区| 99久久99久久综合| 激情av综合网| 天天综合色天天综合| 一区二区三区在线免费播放 | 欧美日韩国产免费| 91免费看片在线观看| 国产乱人伦精品一区二区在线观看| 午夜精品久久久久久久| 亚洲精品成a人| 国产精品免费视频网站| 久久日韩粉嫩一区二区三区| 日韩精品专区在线影院重磅| 在线观看成人免费视频| 色婷婷av一区二区三区大白胸| 不卡视频免费播放| 成人中文字幕在线| 国产精品中文字幕欧美| 国模冰冰炮一区二区| 国内成人自拍视频| 国产一区二区三区久久久| 美国一区二区三区在线播放| 91免费视频观看| 99国产精品国产精品毛片| 99视频一区二区三区| 成人福利电影精品一区二区在线观看 | 国产精品国产三级国产普通话99| 欧美精品一区二区三区很污很色的| 日韩欧美国产综合| 日韩免费高清视频| 国产偷国产偷亚洲高清人白洁| 久久精品亚洲国产奇米99| 欧美国产精品久久| 一区视频在线播放| 一区二区三区不卡视频| 亚洲伦理在线精品| 午夜精品免费在线观看| 久久av资源站| 成人黄色电影在线 | 国产精品美女久久久久av爽李琼| 国产精品婷婷午夜在线观看| 亚洲日韩欧美一区二区在线| 亚洲一区二区偷拍精品| 蜜桃av一区二区三区电影| 国产福利不卡视频| 91久久免费观看| 91精品久久久久久久99蜜桃| 久久久久国产成人精品亚洲午夜| 欧美国产成人精品| 亚洲五码中文字幕| 激情综合色综合久久综合| 国产91丝袜在线播放九色| 色美美综合视频| 精品免费国产一区二区三区四区| 中文字幕国产精品一区二区| 亚洲国产日韩一区二区| 国内精品伊人久久久久av影院 | 欧美一区二区三区喷汁尤物| 精品国产第一区二区三区观看体验 | 国产乱码精品一区二区三区av| 99久久精品一区| 日韩一区二区免费电影| 国产女主播在线一区二区| 午夜精品久久久久久久| 国产suv精品一区二区三区| 欧美三区免费完整视频在线观看| 久久久久88色偷偷免费 | 精品日产卡一卡二卡麻豆| 1000部国产精品成人观看| 麻豆国产精品777777在线|