使用深度優先搜素(DFS)實現馬踏棋盤

2021-10-07 16:13:31 字數 1766 閱讀 6969

感覺想學會dfs說到底最重要的也就是弄懂遞迴怎麼用
#include

#define x 8

#define y 8

int chess[x]

[y]=

;//棋盤

bool nextxy

(int

* x,

int* y,

int count)

break

;case1:

if(*x +

2<= x -1&&

*y +

1<= y -

1&& chess[

*x +2]

[*y +1]

==0)break

;case2:

if(*x +

1<= x -1&&

*y -

2>=

0&& chess[

*x +1]

[*y -2]

==0)break

;case3:

if(*x +

1<= x -1&&

*y +

2<= y -

1&& chess[

*x +1]

[*y +2]

==0)break

;case4:

if(*x -

2>=0&&

*y -

1>=

0&& chess[

*x -2]

[*y -1]

==0)break

;case5:

if(*x -

2>=0&&

*y +

1<= y -

1&& chess[

*x -2]

[*y +1]

==0)break

;case6:

if(*x -

1>=0&&

*y +

2<= y -

1&& chess[

*x -1]

[*y +2]

==0)break

;case7:

if(*x -

1>=0&&

*y -

2>=

0&& chess[

*x -1]

[*y -2]

==0)break

;default

:break;}

return false;

}//檢查周圍是否可以落棋

void

print()

printf

("\n");

}}//輸出棋盤

bool chessboard

(int x,

int y,

int tag)

while

(!flag && count <8)

while

(flag)

x1 = x;

y1 = y;

count++;do

while

(!flag && count <8)

;}chess[x]

[y]=0;

return false;

}//使用遞迴實現dfs

intmain()

return0;

}

輸出結果:

深度優化搜素(dfs

如果我們想輸出乙個數的全排列,eg 1,2,3 的全排列 那麼就有123,132,213,231,312,321,這六種。那如何用 實現呢?for int a 1 a 3 a 暴力列舉是一種,但是如果數字編的更多呢?如1,2,3,4,5,6,7,8,9呢?如果我們還是乙個乙個列舉出來,別說計算機你也...

深度優先搜素及題目

1.搜尋是指已知初始狀態和目標狀態,對問題的中間狀態進行列舉的遍歷的一種演算法,通俗的講,搜尋就是比較複雜的列舉。2.深度優先搜尋是按照深度的方式進行搜尋,就是把所有可行的方案都列舉出來,不斷的去嘗試,直到找到問題的解。設想你在乙個迷宮裡面,當我們在起點時,總要通過各種岔路口才能找到迷宮的終點,那麼...

DFS深度優先搜尋(一定要想好搜素順序)

include using namespace std typedef long long ll const int n 10 int path n 用來存方案 int st n 用來檢查哪乙個數被用過 int n void dfs int u for int i 1 i n i int main ...