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

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

?? 騎士遍歷2.c

?? 都是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一区二区三区免费野_久草精品视频
亚洲一区自拍偷拍| 综合久久久久综合| 欧美久久免费观看| 欧美日韩免费一区二区三区| 欧美日韩一区二区在线观看视频| 色偷偷久久人人79超碰人人澡| 色婷婷综合激情| 欧美老年两性高潮| 欧美一卡二卡三卡四卡| 精品国产一二三区| 国产日韩欧美精品一区| 中文字幕一区二区三区av| 亚洲女女做受ⅹxx高潮| 婷婷成人激情在线网| 另类调教123区 | 日韩一区二区三区在线视频| 777xxx欧美| 久久久一区二区三区捆绑**| 久久精品在这里| 亚洲天堂2014| 午夜欧美一区二区三区在线播放| 青青草伊人久久| 成人精品高清在线| 欧美日韩电影一区| 久久亚洲综合av| 亚洲免费av高清| 蜜桃av一区二区三区| 99国内精品久久| 欧美一区国产二区| 中文字幕精品三区| 日韩av在线免费观看不卡| 国产精品一区二区三区网站| 91婷婷韩国欧美一区二区| 日韩一级高清毛片| 亚洲天堂精品在线观看| 久久精品国产99| 一本高清dvd不卡在线观看| 日韩一区二区三免费高清| 国产精品美女久久久久aⅴ| 日韩电影免费一区| 97久久超碰国产精品电影| 精品成a人在线观看| 夜夜揉揉日日人人青青一国产精品| 久久99国产精品成人| 色综合天天综合网天天看片| www激情久久| 婷婷开心激情综合| 日本伦理一区二区| 欧美国产激情二区三区| 美女视频一区在线观看| 在线亚洲人成电影网站色www| 久久一日本道色综合| 亚洲最快最全在线视频| av电影在线观看完整版一区二区| 日韩丝袜美女视频| 亚洲国产另类av| 91在线播放网址| 中文字幕 久热精品 视频在线| 蜜桃视频免费观看一区| 欧美日韩国产综合一区二区| 中文字幕在线观看一区二区| 国产精品亚洲一区二区三区妖精 | 日韩一区有码在线| 国产在线日韩欧美| 欧美一级久久久| 午夜精品久久久久久| 日本乱人伦一区| 亚洲色图制服丝袜| 91丨porny丨在线| 欧美极品少妇xxxxⅹ高跟鞋| 激情综合色综合久久综合| 日韩一级大片在线| 日韩和欧美一区二区三区| 欧美午夜精品久久久久久孕妇| 最新国产成人在线观看| 成人黄色小视频在线观看| 亚洲国产精品成人综合| 成人污污视频在线观看| 日本一区二区免费在线观看视频| 国产精品一品二品| 国产精品卡一卡二| 色菇凉天天综合网| 午夜欧美大尺度福利影院在线看| 在线成人小视频| 麻豆成人综合网| 国产亚洲欧美日韩俺去了| 成人黄色综合网站| 亚洲国产日韩精品| 欧美一级高清片在线观看| 美国毛片一区二区三区| 久久久久久久久岛国免费| 成人一道本在线| 亚洲乱码国产乱码精品精的特点| 91国产成人在线| 日本特黄久久久高潮| 国产亚洲1区2区3区| 91老师片黄在线观看| 亚洲成人在线免费| 精品粉嫩超白一线天av| fc2成人免费人成在线观看播放 | 欧美日韩一级片网站| 奇米综合一区二区三区精品视频| 亚洲精品在线三区| 成人sese在线| 全国精品久久少妇| 国产精品无遮挡| 欧美一区二区女人| 成人免费看的视频| 免费观看日韩电影| 亚洲三级在线播放| 精品久久五月天| 日本韩国一区二区三区| 蜜桃视频免费观看一区| 亚洲精品美腿丝袜| 久久人人97超碰com| 欧洲国产伦久久久久久久| 国内精品嫩模私拍在线| 亚洲乱码国产乱码精品精98午夜 | 亚洲欧美另类小说视频| 欧美顶级少妇做爰| 91视频在线观看| 国产黄色精品网站| 人人狠狠综合久久亚洲| 亚洲精品视频在线观看免费 | 97久久超碰国产精品| 极品尤物av久久免费看| 亚洲成人黄色影院| 亚洲女人小视频在线观看| 国产日韩欧美精品在线| 日韩欧美一级二级三级久久久| 91一区二区在线| 国产91精品精华液一区二区三区| 午夜久久久久久久久| 亚洲欧美在线观看| 国产蜜臀av在线一区二区三区| 欧美成人伊人久久综合网| 欧美色男人天堂| 91丝袜美女网| 91视频在线观看| 色综合久久中文综合久久97| 国产精品一区二区三区四区| 精品制服美女丁香| 五月婷婷激情综合| 日韩电影一二三区| 婷婷成人激情在线网| 视频精品一区二区| 视频一区二区三区中文字幕| 午夜久久久影院| 美女视频免费一区| 另类人妖一区二区av| 国内精品国产三级国产a久久| 日韩和欧美的一区| 蜜桃一区二区三区在线| 极品美女销魂一区二区三区免费 | 亚洲男女一区二区三区| 日韩码欧中文字| 最新国产精品久久精品| 亚洲女与黑人做爰| 亚洲国产一区二区三区青草影视| 亚洲综合一区二区三区| 成人免费黄色在线| 成人妖精视频yjsp地址| 色婷婷综合久久久中文字幕| 在线观看av一区二区| 欧美日本视频在线| 日韩欧美中文字幕制服| 精品av久久707| 国产精品女同一区二区三区| 亚洲欧美日韩一区| 日韩成人精品在线观看| 国产主播一区二区三区| 成人av在线网| 欧美日韩激情一区| 精品国产免费久久| 国产精品国产成人国产三级| 一区二区三区在线播放| 日韩**一区毛片| 国产黄色精品网站| 欧美日韩在线免费视频| 欧美一区二区私人影院日本| 久久久久国产精品人| 亚洲欧美国产毛片在线| 日韩国产一区二| 粉嫩绯色av一区二区在线观看| 欧美在线你懂的| 欧美国产禁国产网站cc| 亚洲不卡av一区二区三区| 国产美女精品在线| 欧美色中文字幕| 欧美经典一区二区| 三级在线观看一区二区| a亚洲天堂av| 欧美成人精品3d动漫h| 亚洲另类在线制服丝袜| 韩国精品主播一区二区在线观看| 色吧成人激情小说| 欧美videos大乳护士334| 一区二区三区精品久久久| 国产揄拍国内精品对白| 欧美欧美午夜aⅴ在线观看|