[ThinkingDog]是一個(gè)積極向上、樂(lè)觀、熱心的人。
沉思的狗の博客
[ThinkingDog]歡迎您的光臨,請(qǐng)多多指教!
剛寫的八皇后問(wèn)題 - 遞歸 (隨便你定義幾個(gè)皇后了)JAVA
public
class
Queen_Java
{
int
QUEEN_COUNT
=
8
;
//
隨便你定義幾個(gè)皇后了,你可以循環(huán)產(chǎn)生a個(gè)到b個(gè)皇后的解
static
final
int
EMPTY
=
0
; //如果count[x][y] == EMPTY ,則可以放置皇后;反之,其正上方或斜上方必己放置皇后
int
[][] count
=
new
int
[QUEEN_COUNT][QUEEN_COUNT]; //
int
[] QueenIndex
=
new
int
[QUEEN_COUNT]; //第index行的皇后放置位置是QueenIndex [index]
int
resultCount
=
0
; //記錄皇后放置方法的數(shù)量
public
void
putQueenIndex(
int
index)
{
int
row
=
index;
for
(
int
col
=
0
; col
<
QUEEN_COUNT; col
++
)
{
if
(count[row][col]
==
EMPTY)
{ //該位置可以放置皇后
for
(
int
iRow
=
row
+
1
; iRow
<
QUEEN_COUNT; iRow
++
)
{ //增加該位置的正下面/斜下面的count,使之不為0
count[iRow][col]
++
;
if
((col
-
iRow
+
row)
>=
0
)
{
count[iRow][col
-
iRow
+
row]
++
;
}
if
((col
+
iRow
-
row)
<
QUEEN_COUNT)
{
count[iRow][col
+
iRow
-
row]
++
;
}
}
QueenIndex[row]
=
col;
if
(row
==
QUEEN_COUNT
-
1
)
{ //第QUEEN_COUNT個(gè)皇后己放置好,打印出這種皇后布局
print(
++
resultCount);
}
else
{ //繼續(xù)放置下一行的皇后
putQueenIndex(row
+
1
);
}
for
(
int
iRow
=
row
+
1
; iRow
<
QUEEN_COUNT; iRow
++
)
{ //回溯,在此行的皇后不放此列col ,恢復(fù)該位置的正下面/斜下面的count
count[iRow][col]
--
;
if
((col
-
iRow
+
row)
>=
0
)
{
count[iRow][col
-
iRow
+
row]
--
;
}
if
((col
+
iRow
-
row)
<
QUEEN_COUNT)
{
count[iRow][col
+
iRow
-
row]
--
;
}
}
}
}
if
(row
==
0
)
{
System.out.println(QUEEN_COUNT
+
"
皇后共有
"
+
resultCount
+
"
個(gè)解
"
);
}
}
public
void
print(
int
n)
{ //打印皇后布局
System.out.println(QUEEN_COUNT
+
"
皇后的第
"
+
n
+
"
個(gè)解:
"
);
for
(
int
i
=
0
; i
<
QUEEN_COUNT; i
++
)
{
for
(
int
j
=
0
; j
<
QUEEN_COUNT; j
++
)
{
System.out.print(QueenIndex[i]
==
j
?
"
*
"
:
"
-
"
);
}
System.out.println();
}
System.out.println();
}
public
static
void
main(String[] args)
{
new
Queen_Java().putQueenIndex(
0
);
}
}
發(fā)表于 2007-06-12 16:29
沉思的狗
閱讀(3580)
評(píng)論(4)
編輯
收藏
評(píng)論
#
re: 剛寫的八皇后問(wèn)題 - 遞歸 (隨便你定義幾個(gè)皇后了)JAVA
感覺(jué)這個(gè)程序挺完美的,速度很不錯(cuò)的,嘿嘿。
比網(wǎng)上的同類程序應(yīng)該快多了。
用遞歸+回溯法做的
冰封空間
評(píng)論于 2007-06-12 17:16
回復(fù)
更多評(píng)論
#
re: 剛寫的八皇后問(wèn)題 - 遞歸 (隨便你定義幾個(gè)皇后了)JAVA
解釋一下. 要不然看起來(lái)很難懂的.
啊峰
評(píng)論于 2007-06-27 08:53
回復(fù)
更多評(píng)論
#
re: 剛寫的八皇后問(wèn)題 - 遞歸 (隨便你定義幾個(gè)皇后了)JAVA
確實(shí)寫得不錯(cuò),LZ厲害
fk
評(píng)論于 2008-08-28 14:04
回復(fù)
更多評(píng)論
#
re: 剛寫的八皇后問(wèn)題 - 遞歸 (隨便你定義幾個(gè)皇后了)JAVA
附:現(xiàn)在網(wǎng)絡(luò)上最快的八皇后算法,己加注釋
import
java.util.Calendar;
public
class
Queen_Fastest
{
public
static
int
sum
=
0
, upperlimit
=
1
;
//
放皇后時(shí),從右到左遞歸放(右邊是低位,左邊是高位)
/** */
/**
* 三個(gè)參數(shù)每一位代表一列,bit為1的位置不能放置皇后(與上面放置的皇后在45度角或垂直方向上有沖突)
*
@param
row 位為1的列說(shuō)明上面某一行在此列己放置一個(gè)皇后
*
@param
ld 位為1的說(shuō)明對(duì)應(yīng)的左上角線己有皇后
*
@param
rd 位為1的說(shuō)明對(duì)應(yīng)的右上角線己有皇后
*/
public
static
void
compute(
int
row,
int
ld,
int
rd)
{
if
(row
!=
upperlimit)
{
int
pos
=
upperlimit
&
~
(row
|
ld
|
rd);
//
對(duì)當(dāng)前行所有可以放置皇后的地方放置一個(gè)皇后,然后進(jìn)入下一行
while
(pos
!=
0
)
{
int
p
=
pos
&
-
pos;
//
取得最右邊可放置皇后的位置
pos
-=
p;
//
在去掉這個(gè)位置,說(shuō)明這個(gè)位置己以測(cè)試過(guò)
//
放置下一行的皇后,修改三個(gè)參數(shù)垂直與45度角上以前放置皇后點(diǎn)據(jù)的下一行的位置
compute(row
+
p, (ld
+
p)
<<
1
, (rd
+
p)
>>
1
);
}
}
else
//
row所有列都為1,說(shuō)明己成功得到一個(gè)方案
sum
++
;
}
public
static
void
main(String[] args)
{
Calendar start;
int
n
=
8
;
if
(args.length
>
0
)
n
=
Integer.parseInt(args[
0
]);
start
=
Calendar.getInstance();
if
((n
<
1
)
||
(n
>
32
))
{
System.out.println(
"
只能計(jì)算1-32之間\n
"
);
return
;
}
System.out.println(n
+
"
皇后\n
"
);
upperlimit
=
(upperlimit
<<
n)
-
1
;
compute(
0
,
0
,
0
);
System.out.println(
"
共有
"
+
sum
+
"
種排列, 計(jì)算時(shí)間
"
+
(Calendar.getInstance().getTimeInMillis()
-
start.getTimeInMillis())
+
"
毫秒 \n
"
);
}
}
冰封空間
評(píng)論于 2009-03-05 13:03
回復(fù)
更多評(píng)論
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
<
2007年6月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
導(dǎo)航
BlogJava
首頁(yè)
發(fā)新隨筆
發(fā)新文章
聯(lián)系
聚合
管理
統(tǒng)計(jì)
隨筆: 115
文章: 1
評(píng)論: 86
引用: 0
常用鏈接
我的隨筆
我的文章
我的評(píng)論
我的參與
最新評(píng)論
留言簿
(5)
給我留言
查看公開留言
查看私人留言
隨筆檔案
(115)
2015年1月 (1)
2011年5月 (12)
2011年4月 (2)
2010年9月 (2)
2010年8月 (4)
2009年9月 (1)
2009年6月 (1)
2009年3月 (1)
2008年6月 (1)
2008年1月 (2)
2007年7月 (2)
2007年6月 (2)
2007年5月 (4)
2007年4月 (1)
2007年1月 (1)
2006年12月 (1)
2006年11月 (2)
2006年10月 (2)
2006年9月 (3)
2006年8月 (6)
2006年7月 (1)
2006年6月 (2)
2006年5月 (10)
2006年4月 (50)
2006年3月 (1)
網(wǎng)址
http://blog.csdn.net/Unagain
v_JULY_v
搜索
積分與排名
積分 - 210835
排名 - 266
最新評(píng)論
1.?re: 使用Policy文件來(lái)設(shè)置Java的安全策略[未登錄](méi)
ss
--啊啊
2.?re: Jni中C++和Java的參數(shù)傳遞
老大,Long 是J啊,不是L啊,可害苦我了,趕緊改回來(lái)吧;
--cnhua5
3.?re: Jni中C++和Java的參數(shù)傳遞
樓主,在jni里返回String和C++里獲取的為什么不一樣,比如在java里看到的值是57891234,在C++里顯示的是5789@,這是為什么啊?
--chr
4.?re: 螺旋數(shù)字與坐標(biāo)
對(duì)我的項(xiàng)目很有幫助。
謝謝
--cs221313
5.?re: Jni中C++和Java的參數(shù)傳遞
long的符號(hào)表寫錯(cuò)了,作為初學(xué)者亞歷山大啊
--hhhhhh
閱讀排行榜
1.?Jni中C++和Java的參數(shù)傳遞 (63524)
2.?本地計(jì)算機(jī)上的 MSSQLSERVER 服務(wù)啟動(dòng)后又停止了。一些服務(wù)自動(dòng)停止,如果它們沒(méi)有什么可做的,例如“性能日志和警報(bào)”服務(wù)。[用批處理解決](22460)
3.?使用Policy文件來(lái)設(shè)置Java的安全策略(10507)
4.?一個(gè)簡(jiǎn)單的十六進(jìn)制計(jì)算器(出自Win程序設(shè)計(jì))(8747)
5.?VC++6.0 全部默認(rèn)快捷鍵(6212)
評(píng)論排行榜
1.?Upload Server (HTTP 上傳服務(wù)JAVA程序) 速度極快(11)
2.?Jni中C++和Java的參數(shù)傳遞 (10)
3.?垃圾軟件反刪除批處理文件 (7)
4.?剛寫的八皇后問(wèn)題 - 遞歸 (隨便你定義幾個(gè)皇后了)JAVA(4)
5.?火車運(yùn)煤?jiǎn)栴}(4)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 沉思的狗
[ThinkingDog]是一個(gè)積極向上、樂(lè)觀、熱心的人。
主站蜘蛛池模板:
亚洲日本一区二区一本一道
|
亚洲色欲色欲www在线丝
|
亚洲色自偷自拍另类小说
|
亚洲国产美女福利直播秀一区二区
|
亚洲黄色片在线观看
|
久久亚洲精品无码gv
|
a级毛片在线免费观看
|
成人免费无码大片A毛片抽搐
|
美女网站在线观看视频免费的
|
久草视频在线免费
|
亚洲男人的天堂一区二区
|
中文字幕亚洲精品
|
特级毛片全部免费播放a一级
|
久久亚洲国产成人影院网站
|
亚洲三级中文字幕
|
丁香花在线观看免费观看图片
|
国产h视频在线观看免费
|
国产亚洲美女精品久久久2020
|
亚洲乱码一区二区三区国产精品
|
成人片黄网站色大片免费观看cn
|
搡女人真爽免费视频大全
|
国产成人A人亚洲精品无码
|
亚洲av日韩综合一区久热
|
一区二区三区观看免费中文视频在线播放
|
俄罗斯极品美女毛片免费播放
|
亚洲黄色免费网站
|
WWW免费视频在线观看播放
|
免费的涩涩视频在线播放
|
久久久久亚洲AV片无码下载蜜桃
|
国产无遮挡色视频免费视频
|
亚洲AV天天做在线观看
|
免费福利资源站在线视频
|
最近免费中文字幕视频高清在线看
|
亚洲av午夜成人片精品网站
|
牛牛在线精品免费视频观看
|
精品久久久久成人码免费动漫
|
我的小后妈韩剧在线看免费高清版
|
亚洲AV无码乱码精品国产
|
亚洲人成77777在线播放网站不卡 亚洲人成77777在线观看网
|
久久久久亚洲AV无码专区体验
|
日日狠狠久久偷偷色综合免费
|