-
你應該在路上。
按 F1 鍵切換到選擇狀態。
-
#include
#define maxsize 100
#define n 8
int board[8][8];定義電路板。
int htry1[8]=;
儲存馬相對於當前位置線的每個退出位置的增量下標陣列*
int htry2[8]=;
在列下標中儲存馬*相對於當前位置的每個退出位置的增量陣列*
struct stackstack[maxsize];定義堆疊陣列。
int top=0;堆疊指標。
void initlocation(int xi,int yi);馬在棋盤上起始位置的坐標。
int trypath(int i,int j);馬匹向每個方向嘗試,直到它們擁有整個棋盤。
void display();輸出馬走的路徑。
void initlocation(int xi,int yi)
int trypath(int i,int j)
a[h]=number;將條目數存入陣列 a[8]}}
for(h=0;h<8;h++)根據可行路徑的數量,按下錶排序,並放入陣列d[8]。
a[s]=9;
if(top>=63) 如果玩了整個棋盤,則返回 1
return (1);
find=0;指示未找到下乙個位置。
for(h=0;h<8;h++) 在八個方向上。
if(find==1) 如果找到下乙個位置進入堆疊。
否則,返回堆疊。
return (0);
void display()
printf("begin with %d board:", 8*(x-1)+y);
initlocation(x-1,y-1);呼叫啟動坐標函式}
-
踩在棋盤上的貪婪演算法。
問題描述]馬的遍歷問題。在 8 個 8 格的棋盤上,從任何乙個指定的方格開始,找到最短路徑讓馬穿過棋盤的每個方格,並且只經過一次。 【初步設計】 首先,這是乙個搜尋問題,通過深度優先搜尋來解決。
演算法如下:1、輸入初始位置坐標x,y; 2.步驟C:如果C>64輸出乙個解,返回上一步C--x,y)c的子節點,計算(x,y)的八個方向,並選擇可行子節點迴圈遍歷所有可行子節點,步驟C++重複2顯然,(2)是乙個遞迴過程,大致如下:
#define n 8 ……void dfs(int x,int y,int count) for(i=0;i <8;++i) }
-
這要看你用什麼演算法,如果是普通的深度優先搜尋,6*6和8*8的差異是非常大的,深度優先搜尋本身的時間複雜度是指數級的,對於乙個點去做8個方向去嘗試,那麼理論上,在最壞的情況下,6*6和8*8尺度下的時間複雜度分別為o(8 36)和o(8 64),你計算8 64和8 36之間的差值是多少倍,6*6再快也沒用。
-
這個是以前在網際網絡上找到的(我不知道原來的連線),可以完成基本要求。
#include
#include
using namespace std;
const int maxsize=512;
const int n=8;
int board[8][8];定義電路板。
int htry1[8]=;
儲存馬相對於當前位置線的每個退出位置的增量下標陣列*
int htry2[8]=;
在列下標中儲存馬*相對於當前位置的每個退出位置的增量陣列*
struct stack stack[maxsize];定義堆疊陣列。
int top=-1;堆疊指標。
void initlocation(int xi,int yi);馬在棋盤上起始位置的坐標。
int trypath(int i,int j);馬匹向每個方向嘗試,直到它們擁有整個棋盤。
void display();輸出馬走的路徑。
void main()
cout <<"來自 (" <-1)
a[h]=number;將條目數存入陣列 a}}
for(h=0;h<8;h++)
a[s]=9;
director=stack[top].director;
if(top>=63) 如果玩了整個棋盤,則返回 1
return (1);
find=0;指示未找到下乙個位置。
for(h=director+1;h<8;h++)
if(find==1)else
return 0;
輸出馬走的路徑。
void display()
cout <