回溯法解n后问题

自己写回溯法求解n后问题,有什么可以改进大家指点指点
/**  * n后问题  * @param a 基础数组 全为0  * @param n 默认为0  */ public static void b(int [][]a,int n){
    //判断是否已经添加到最后一行是就打印当前的结果
    if(n==a.length){
        print(a);
//打印


num++
;
return;
}
for(
int i=
0
;i<a.
length
;i++){
boolean flag=
true;
a[n][i]=
1
;
//循环对当前行的每一列放置棋子

for(
int j=n
;j>=
0
;j–){
//判断放置棋子的这一列是否有棋子

if(a[j][i]==
1&&j!=n){ a[n][i]=
0
;
//回溯
flag=
false;
break;
} }
if(flag==
false){
continue;
//在下一个位置放置棋子


}
for(
int j=n
,m=i
;j>=
0&&m>=
0
;j–
,m–){
//判断放置棋子的左上方是否有棋子

if(a[j][m]==
1&&j!=n){ a[n][i]=
0
;
//回溯
flag=
false;
break;
} }
if(flag==
false){
continue;
//在下一个位置放置棋子


}
for(
int j=n
,m=i
;j>=
0&&m<a.
length
;j–
,m++){
//判断放置棋子的右上方是否有棋子

if(a[j][m]==
1&&j!=n){ a[n][i]=
0
;
//回溯
flag=
false;
break;
} }
if(flag==
false){
continue;
//在下一个位置放置棋子

}
if(flag){

	    queen(a,n+1);//可以放置则放置下一行

} a[n][i]=
0
;
//回溯
}}

    原文作者:回溯法
    原文地址: https://blog.csdn.net/u011002126/article/details/70045605
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞