首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
11-4 n皇后问题:要求在一个nXn的棋盘上放置n个皇后
[问答题]
11-4 n皇后问题:要求在一个nXn的棋盘上放置n个皇后,要求放置的n个皇后不会互相吃掉;皇后棋子可以吃掉任何它所在的那一行、那一列,以及那两条对角线上的任何棋子。
添加笔记
求解答(1)
邀请回答
收藏(3)
分享
纠错
1个回答
添加回答
0
温暖的秋裤
class
Solution
{
LinkedList
<
List
<
String
>>
res
=
new
LinkedList
();
public
List
<
List
<
String
>>
solveNQueens
(
int
n
)
{
if
(
n
==
0
)
return
res
;
StringBuilder sb
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
n
;
i
++){
sb
.
append
(
"."
);
}
String
[]
str
=
new
String
[
n
];
for
(
int
i
=
0
;
i
<
n
;
i
++){
str
[
i
]=
sb
.
toString
();
}
backTrack
(
str
,
0
);
return
res
;
}
//在第i行放值,回溯
public
void
backTrack
(
String
[]
str
,
int
i
){
int
n
=
str
.
length
;
if
(
i
==
n
){
ArrayList
<
String
>
list
=
new
ArrayList
();
for
(
String s
:
str
){
list
.
add
(
s
);
}
res
.
add
(
list
);
return
;
}
for
(
int
j
=
0
;
j
<
n
;
j
++){
if
(
valid
(
str
,
i
,
j
)){
//改变
String old
=
str
[
i
];
StringBuilder sb
=
new
StringBuilder
(
old
);
sb
.
setCharAt
(
j
,
'Q'
);
str
[
i
]=
sb
.
toString
();
backTrack
(
str
,
i
+
1
);
str
[
i
]=
old
;
}
}
}
public
boolean
valid
(
String
[]
str
,
int
i
,
int
j
){
int
len
=
str
.
length
;
//检查列
for
(
int
a
=
0
;
a
<
i
;
a
++){
if
(
str
[
a
].
charAt
(
j
)==
'Q'
)
return
false
;
}
//检查左上
for
(
int
dis
=
1
;
dis
<=
i
&&
j
>=
dis
;
dis
++){
if
(
str
[
i
-
dis
].
charAt
(
j
-
dis
)==
'Q'
)
return
false
;
}
//检查右上
for
(
int
dis
=
1
;
dis
<=
i
&&
j
+
dis
<
len
;
dis
++){
if
(
str
[
i
-
dis
].
charAt
(
j
+
dis
)==
'Q'
)
return
false
;
}
return
true
;
}
}
发表于 2021-03-10 01:58:21
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
上传者:
小小
难度:
1条回答
3收藏
1591浏览
热门推荐
相关试题
在超网络中,生成子网络参数的过程通...
机器学习
评论
(1)
分析以下代码 class Pers...
Javascript
评论
(1)
请问以下有关 Promise 内置...
Javascript
评论
(1)
你正在设计一个深度学习系统,该系统...
深度学习
评论
(1)
宏定义是C语言中非常实用的一种计算...
C语言
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题