51.N皇后
- N皇后就是同一行,同一列,同一对角线只能存在一个皇后,而输入是n*n格子,答案让你输出对应的方案
private List<List<String>> results;
public List<List<String>> solveNQueens(int n) {
results = new ArrayList<>();
if(n==0){
results.add(new ArrayList<>());
return results;
}
boolean [][] vis= new boolean[n][n];
dfs(0,n,vis);//从第一排开始
return results;
}
private void dfs(int x,int n,boolean [][] vis){
if(x==n){
List<String> list = new ArrayList<>();
for(int i=0;i<n;i++){
StringBuilder stringBuilder = new StringBuilder();
for(int j=0;j<n;j++){
if(vis[i][j]){
stringBuilder.append("Q");
}
else{
stringBuilder.append(".");
}
}
list.add(stringBuilder.toString());
}
results.add(list);
return;
}
for(int i=0;i<n;i++){
int y = i;
if(check(x,y,n,vis)){
vis[x][y]=true;
dfs(x+1,n,vis);
vis[x][y]=false;
}
}
}
private boolean check(int x,int y,int n,boolean[][]vis){
for(int i=0;i<n;i++){//判断同一列是否只存在一个
if(i!=x&&vis[i][y]){
return false;
}
}
//后边四个条件是判断对角线是否只存在一个
for(int i=x,j=y;i<n&&j<n;i++,j++){
if(vis[i][j]){
return false;
}
}
for(int i=x,j=y;i>=0&&j>=0;i--,j--){
if(vis[i][j]){
return false;
}
}
for(int i=x,j=y;i<n&&j>=0;i++,j--){
if(vis[i][j]){
return false;
}
}
for(int i=x,j=y;i>=0&&j<n;i--,j++){
if(vis[i][j]){
return false;
}
}
return true;
}
52.N皇后II
- N皇后就是同一行,同一列,同一对角线只能存在一个皇后,而输入是n*n格子,答案让你输出有几种方案
private int results;
public int totalNQueens(int n) {
results = 0;
if(n==0){
return results;
}
boolean [][] vis= new boolean[n][n];
dfs(0,n,vis);//从第一排开始
return results;
}
private void dfs(int x,int n,boolean [][] vis){
if(x==n){
results++;
return;
}
for(int i=0;i<n;i++){
int y = i;
if(check(x,y,n,vis)){
vis[x][y]=true;
dfs(x+1,n,vis);
vis[x][y]=false;
}
}
}
private boolean check(int x,int y,int n,boolean[][]vis){
for(int i=0;i<n;i++){//判断同一列是否只存在一个
if(i!=x&&vis[i][y]){
return false;
}
}
//后边四个条件是判断对角线是否只存在一个
for(int i=x,j=y;i<n&&j<n;i++,j++){
if(vis[i][j]){
return false;
}
}
for(int i=x,j=y;i>=0&&j>=0;i--,j--){
if(vis[i][j]){
return false;
}
}
for(int i=x,j=y;i<n&&j>=0;i++,j--){
if(vis[i][j]){
return false;
}
}
for(int i=x,j=y;i>=0&&j<n;i--,j++){
if(vis[i][j]){
return false;
}
}
return true;
}
来源:CSDN
作者:471912619
链接:https://blog.csdn.net/qq_33248299/article/details/103464484