遞迴解決經典八皇后問題

2021-10-05 12:38:35 字數 2607 閱讀 2641

public

class

recursiontest

//列印問題

public

static

void

test

(int n)

//else

}//階乘問題

public

static

intfactorial

(int n)

else

}}

迷宮問題:

//迷宮問題,求初始點到終點的一條通路(不一定是最小通路!)

//牆體設為1,路徑設為0

/* 整體思路:

1、每當我們經過乙個點,將點標記為2,代表已走過;

2、對於該點,我們依照下右上左的方向向後查詢;

3、如果該點所有路徑都走不通,就返回false,回到上乙個點處向後查詢;

4、當到達終點,即終點標記為2時,一層一層向上推出遞迴。

遞迴思路:

1、終止條件:終點處被遍歷到或者已遍歷完所有可遍歷點;

2、每層遞迴該做的事:判斷該點是否是終點,標記該點已走過,下右上左策略判斷是否可走;

3、返回引數:返回該點四個方向是否有可到終點的通路。

*/public

class

migong

system.out.

println()

;}}private

static

boolean

findway

(int

map,

int i,

int j)

if(map[i]

[j]==0)

else

if(j +

1< map[0]

.length &&

findway

(map, i, j +1)

)else

if(i -

1>=0&&

findway

(map, i -

1, j)

)else

if(j -

1>=0&&

findway

(map, i, j -1)

)else

}else

}}

八皇后問題

二維陣列解法:

/*

1、遞迴結束條件:當遍歷完所有(即遍歷完從第一行第八列開始的所有可能)自動結束

2、每層遞迴流程:首先判斷這一行是否為第八行,如果是,直接輸出並返回,如果不是,在這一行尋找可以放置皇后的位置

*/public

class

eightempress

private

static

void

findway

(int

board,

int num)

system.out.

println()

;}return;}

else}}

}//判斷是否可以放置棋子

private

static

boolean

placeable

(int

board,

int x,

int y)

/* 斜向是否存在棋子

斜向表示:要麼與該點和相等(左上->右下),要麼與該點差相等(右上->左下)

即:i+j==x+y||i-j==x-y j=x+y-i||j=y-x+i

*/if(

(x+y-i>=

0&&x+y-i<

8&&board[i]

[x+y-i]==1

)||(y-x+i>=

0&&y-x+i<

8&&board[i]

[y-x+i]==1

))}return

true;}

}

一維陣列解法:

//用一維陣列解決八皇后問題

/* 思路分析:用陣列小標來表示行號,用陣列的值表示列數

*/public

class

eightempress2

private

static

void

findway

(int

col,

int row)

else}}

}//判斷是否可以放置

private

static

boolean

check

(int

col,

int row,

int column)

}return

true;}

//輸出

private

static

void

print

(int

col)

else

} system.out.

println()

;}}}

經典遞迴問題 八皇后

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。解題思路 在這之前我們要明確遞迴求解其實是分成兩個部分的 遞迴回朔...

經典 八皇后 遞迴

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法.由於使用迴圈會存在多層,比較繁雜,這裡使用遞迴dfs 深度優先搜尋...

遞迴演算法解決八皇后問題

在 8 8 格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有 76 種方案。1854 年在柏林的象棋雜誌上不同的作者發表了 40 種不同的解,後來有人用圖論的方法解出 92 種結果。這個問題也一共有92種解法 思路分析 第乙個...