八皇后问题

采用了 递归和剪枝,一旦出现不符合要求的位置,立即停止搜索,节约了资源和时间。

con()函数用来判断是否符合要求。

结果显示共92种放置策略。

public class Queen {
	static int m=0;
	static int array[]=new int[8];
	static boolean con(int a,int b,int c,int d) {
		return ((a+b-c-d)!=0)&&((a-b+d-c)!=0&&(a!=c)&&(b!=d));
	}

	static void compare(int array[],int row) {
		//row为待加入和行
		//待加入的行要和前面的进行con计算
		int n=0;
		for(int line=0;line<8;line++) {
			n=0;
			for(int i=0;i<row;i++) {
				
				if(con(row,line,i,array[i]) ){	
					n=n+1;
				}else {
					break;
				}
			}
			
			if(n==row) {
				
				array[row]=line;
				//System.out.println("row:  "+row+" array[row]:"+line);
				if(row+1<8) {
					compare(array,row+1);
				}else {
					for(int i=0;i<8;i++) {
						System.out.print(array[i]+"   ");
					}
					System.out.println(++m);
				}
				
			}
			
		}	
	}
	public static void main(String args[]) {
		for(int i=0;i<8;i++) {
			array[0]=i;
			compare(array,1);
		}
		
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值