亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美精品一区二区在线观看| 精品国产百合女同互慰| 奇米影视一区二区三区小说| 亚洲国产精品成人综合| 91麻豆精品国产91久久久资源速度 | 欧美日韩在线免费视频| 国产91对白在线观看九色| 日韩精品亚洲一区二区三区免费| 亚洲欧美在线另类| 久久男人中文字幕资源站| 欧美理论电影在线| 99精品热视频| 顶级嫩模精品视频在线看| 美美哒免费高清在线观看视频一区二区 | 亚洲精品国产无套在线观| 久久综合视频网| 在线电影国产精品| 色妞www精品视频| 高清国产一区二区| 国产专区综合网| 久久精品国产一区二区三区免费看| 一个色综合网站| 亚洲女与黑人做爰| 国产精品久久久久桃色tv| 久久亚洲精品小早川怜子| 91精品国产综合久久精品| 欧美日韩在线一区二区| 在线观看日韩av先锋影音电影院| av不卡在线观看| 成人久久久精品乱码一区二区三区| 国内成人自拍视频| 秋霞电影网一区二区| 日日夜夜免费精品| 亚洲成av人片在线观看| 亚洲综合色区另类av| 亚洲欧美日韩人成在线播放| 中文字幕一区二区在线观看| 国产精品美女一区二区在线观看| 中文字幕不卡的av| 国产精品区一区二区三区| 日韩av电影免费观看高清完整版| 亚洲国产精品一区二区尤物区| 亚洲与欧洲av电影| 亚洲成av人片一区二区| 亚洲大片在线观看| 日韩av中文在线观看| 日韩在线观看一区二区| 日日欢夜夜爽一区| 麻豆91精品91久久久的内涵| 另类的小说在线视频另类成人小视频在线 | 欧美综合色免费| 欧美日本乱大交xxxxx| 欧美区一区二区三区| 欧美一区二区视频网站| 欧美成人性战久久| 国产亚洲成aⅴ人片在线观看| 精品对白一区国产伦| 欧美激情中文不卡| 亚洲欧美日韩久久精品| 亚洲第一在线综合网站| 青娱乐精品视频| 丁香啪啪综合成人亚洲小说| 99精品视频在线观看免费| 欧美性猛片aaaaaaa做受| 欧美人体做爰大胆视频| 欧美sm美女调教| 中文字幕精品—区二区四季| 一区二区成人在线| 老司机精品视频一区二区三区| 国产一区二区日韩精品| 91啪九色porn原创视频在线观看| 欧美三级电影网站| 久久久亚洲欧洲日产国码αv| 国产精品国模大尺度视频| 亚洲第一激情av| 国产一区二区0| 一本色道久久加勒比精品| 欧美一级视频精品观看| 中文字幕免费不卡| 爽好久久久欧美精品| 国产成人亚洲综合a∨婷婷| 91久久精品一区二区二区| 欧美tk—视频vk| 亚洲黄色av一区| 韩国一区二区在线观看| 色婷婷激情久久| 精品卡一卡二卡三卡四在线| 亚洲少妇最新在线视频| 久久精品国内一区二区三区| 色综合天天综合| 久久综合九色综合欧美就去吻| 国产精品麻豆99久久久久久| 日韩av电影一区| 色欧美片视频在线观看在线视频| 欧美电影免费观看高清完整版在线观看| 国产精品久线在线观看| 日本欧美在线观看| 91一区在线观看| 久久久久国产免费免费| 日本不卡一二三| 色国产精品一区在线观看| 国产亚洲制服色| 蜜桃视频在线一区| 欧美色电影在线| 亚洲免费高清视频在线| 国产91精品一区二区麻豆网站 | 石原莉奈一区二区三区在线观看| 成人动漫精品一区二区| 日韩午夜av电影| 亚洲成人777| 欧美性欧美巨大黑白大战| 国产精品萝li| 国产精一区二区三区| 欧美日韩国产天堂| 亚洲一区二区视频在线观看| 99久久综合狠狠综合久久| 久久久久久久久伊人| 麻豆精品视频在线观看| 欧美精三区欧美精三区| 亚洲一区视频在线| 91免费版pro下载短视频| 日本一区二区免费在线观看视频 | 亚洲国产日韩一级| 91黄色激情网站| 亚洲欧洲成人精品av97| 成人免费毛片嘿嘿连载视频| 精品国产伦一区二区三区免费| 日本最新不卡在线| 91麻豆精品国产91久久久使用方法 | 欧美日韩电影在线播放| 樱桃视频在线观看一区| 91在线免费看| 一区二区三区日韩精品视频| 91丨porny丨最新| 亚洲视频狠狠干| 在线精品视频一区二区三四| 一区二区三区精品视频| 91久久精品一区二区三区| 亚洲一区二区三区中文字幕在线 | 欧美在线观看视频一区二区三区| 综合色中文字幕| 色一情一乱一乱一91av| 一区二区在线看| 在线观看免费亚洲| 亚洲国产成人tv| 欧美亚洲国产一卡| 香蕉成人伊视频在线观看| 欧美日韩一区二区三区视频| 亚洲国产成人porn| 日韩欧美一二区| 国产999精品久久久久久绿帽| 国产色一区二区| 色综合久久天天| 亚洲高清在线精品| 欧美一级淫片007| 国产激情偷乱视频一区二区三区| 国产精品欧美综合在线| 日本高清免费不卡视频| 亚洲1区2区3区视频| 欧美一区二区三区色| 国产成人亚洲综合a∨婷婷| 亚洲日本在线视频观看| 欧美日本乱大交xxxxx| 韩国一区二区三区| 亚洲日本在线视频观看| 91精品国产91热久久久做人人 | 亚洲最快最全在线视频| 日韩一区二区影院| 成人美女在线观看| 亚洲一本大道在线| 日韩精品一区二区三区蜜臀| 国产91在线看| 亚洲bdsm女犯bdsm网站| 久久精品人人做| 欧美中文字幕一区| 狠狠久久亚洲欧美| 亚洲一区二区精品久久av| 久久综合狠狠综合久久综合88| 91在线看国产| 精品在线播放免费| 亚洲女厕所小便bbb| 欧美一区二区三区人| 99久久亚洲一区二区三区青草| 午夜影院久久久| 亚洲国产岛国毛片在线| 欧美日韩高清一区| 99久久精品免费精品国产| 日韩精品国产欧美| 国产精品久久久久久久久免费桃花 | 午夜电影一区二区| 欧美国产欧美综合| 91精品欧美综合在线观看最新 | 国产一区视频在线看| 一区二区成人在线观看| 国产偷国产偷精品高清尤物| 欧美视频一二三区| 99精品视频在线免费观看| 黄色成人免费在线| 亚洲高清免费一级二级三级| 中文文精品字幕一区二区|