遞迴 回溯 馬踏棋盤問題

2021-08-29 01:53:33 字數 989 閱讀 1321

將馬隨機放在西洋棋的board[0~n-1][0~n-1]的某個方格中,馬按走棋規則進行移動。,走遍棋盤上全部n*n個方格。編制遞迴程式,求出馬的行走路線,並按求出的行走路線,將數字1,2,…,n*n依次填入乙個n×n的方陣,輸出之。

輸入:棋盤的大小n(n<10),馬的初始位置(i,j)(1<=i<=n,1<=j<=n)

輸出:馬的行走路線.

執行結果:

演算法實現:

static int st=1; //標記走過的步伐數
實現馬在棋盤的遍歷.

status go(int a[10][10],int n,int i,int j)

if(!go(a,n,i-2,j-1))//向其他八個方向試探 不成功就後退 回溯

if(!go(a,n,i-2,j+1))

if(!go(a,n,i-1,j-2))

if(!go(a,n,i-1,j+2))

if(!go(a,n,i+1,j-2))

if(!go(a,n,i+1,j+2))

if(!go(a,n,i+2,j-1))

if(!go(a,n,i+2,j+1))

return ok;//不要漏了這句 死迴圈!及時返回值

}else //不成功返回false

return false;

}

判斷當前位置是否合法 合法返回1 不合法返回0。

int verity(int a[10][10],int i,int j)
輸出棋盤

void printchessboard(int a[10][10],int n)

}

馬踏棋盤問題(dfs求解)

問題描述 8 8的棋盤,剛開始讓馬在棋盤的任意乙個位置上,讓馬踏日,有八個方向 判斷沒踏過並且可踏,就踏,直到踏完所有的格仔 cnt 64 呼叫printchess函式。在外層另外加上兩層,確保 8 8 方格中的每乙個格仔都有8中不同的選擇 重點 為了確保每個格仔能走日字,而且選擇的可能性等同,初始...

回溯演算法(馬踏棋盤)

近期學習了回溯演算法於是自己寫了馬踏棋盤的遞迴以及非遞迴方式的 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...