8皇后问题(使用数组&递归)

8皇后问题
分析:在88的格子中放置8个皇后。皇后和皇后横,竖,斜都不能相遇
8
8的格子放置皇后,且不能相遇。相当于一行只放一个皇后,每行皇后放在不同的列(下标)。
假设把第一个皇后放在0下标的位置。
继续在第二行下标(0~7)的位置放置第二个皇后,并判断是否会和前面的皇后相遇,
相遇则放在下标+1的位置,继续判断,相遇下标+1,直至不相遇。
继续在第三行放置第三个皇后,判断是否会和前面的皇后相遇
。。。。。。
继续在第八行放置第八个皇后,判断是否会和前面的皇后相遇。
结束遍历数组打印输出。

把第一个皇后放置在下标为1的位置。
继续放置。。。。。
。。。。直到八个皇后放完

然后放在下标为2的位置,。。。。直到下标为7

//8皇后问题
public class Test9{
	public static void main(String[] args){
		int[] a= new int[8];
		place(a,0);
	}
	public static void place(int[] a,int row){
		if(row==8){//判断第七排皇后是否放置结束
			for(int i=0;i<8;i++){//遍历数组打印输出
				System.out.print(a[i]+"\t");
			}
			System.out.println();//换行
			return;//结束程序
		}
		//放置皇后(注意for循环内是赋值)
		outer:for(a[row]=0;a[row]<8;a[row]++){
			//判断该皇后的位置是否会和前面的皇后相遇
			for(int i=0;i<row;i++){
				//a[row]-a[i]==row-i || a[row]-a[i]==i-row
				//该代码适用于判断两个皇后斜线相遇的规律
				if(a[row]==a[i] || a[row]-a[i]==row-i || a[row]-a[i]==i-row){
					//continue代表退出本次循环,继续下一次循环。
					//执行改代码。说明两个皇后相遇,所在下标作废,继续下一次循环
					continue outer;
				}
			}
			//第一排坐标赋值结束,使用递归继续下一排坐标赋值
			place(a,row+1);
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值