馬踏棋盤(關於回溯法的應用)

2021-08-20 11:10:41 字數 1134 閱讀 5647

問題描述:

在中國象棋中,棋子馬的走法是走「日」字型;

現有一8*8的中國象棋棋盤,棋子馬從任意給定一點出發,走「日」字型,要求為馬

尋找一條走遍棋盤每一格並且只經過一次的一條路徑。

給定乙個初始的座標,如(0,0),從該點向外走「日」字型,有兩種走法,若起始點

在(4,4),棋子的每個方向都可以走,有八種走法。

所以正常計算的計算量過大,使用回溯法會優化不少

回溯演算法的基本思想是:

下一條路。八皇后問題就是回溯演算法的典型,第一步按照順序放乙個皇后,然後第二

步符合要求放第2個皇后,如果沒有位置符合要求,那麼就要改變第乙個皇后的位

置,重新放第2個皇后的位置,直到找到符合條件的位置就可以了。回溯演算法說白了

就是窮舉法。不過回溯演算法使用剪枝函式,剪去一些不可能到達 最終狀態(即答案狀

態)的節點,從而減少狀態空間樹節點的生成。

#include

#include

#define n 8

struct nx//實時移動到的位置座標

;int array[9][9];

int count;//生成結果數

void initialization()//初始化函式}}

struct nx move_house(int direct, int x, int y) //馬從位置(x,y)出發,從各個方向開始嘗試

return next;//將位置座標的及結構體返回

}int illegal_put(int deepth, int m, int n)

void list_output()

printf("\n");

}printf("\n");

}void house_track(int deepth, int x,int y)

}if (direct == 8)

array[x][y] = 0;

}else

}int main()

回溯演算法(馬踏棋盤)

近期學習了回溯演算法於是自己寫了馬踏棋盤的遞迴以及非遞迴方式的 theme 馬踏棋盤 回溯演算法 coder 秒針的聲音 time 2015.1.11 include include include define m 8 typedef struct nodehorse horse horse1 i...

回溯演算法(馬踏棋盤)

近期學習了回溯演算法於是自己寫了馬踏棋盤的遞迴以及非遞迴方式的 theme 馬踏棋盤 回溯演算法 coder 秒針的聲音 time 2015.1.11 include include include define m 8 typedef struct nodehorse horse horse1 i...

回溯演算法之馬踏棋盤

問題描述 在8 8西洋棋棋盤上,讓馬從某一位置開始,走 日 子型踏遍棋盤每乙個格仔。演算法思想 採用回溯演算法,在每乙個點上按照一定順序探查下一步的走法,若走不動,則回溯到上一步,繼續探查 include define n 8 typedef struct move int chess n n in...