自己写回溯法求解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){} a[n][i]=0;//回溯 }}queen(a,n+1);//可以放置则放置下一行
回溯法解n后问题
最新推荐文章于 2022-08-01 10:17:16 发布