感覺想學會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 ...