八皇后问题

//八皇后问题
//在8*8的棋盘上摆放8个皇后,使其不能互相攻击,即任意的两个皇后不能处在同意行,同一列,或同意斜线上。
public class Queue {
	public static int fb = 8; //皇后的个数
	public static int count = 0;//总共有多少中方法
	
	public static void main(String[] args) {
		int tpostion[][] = new int[fb][fb];//棋盘
		process(tpostion,0);
		System.out.println(count);
	}
	
	public static void process(int mr[][],int curstep){
		if(curstep == fb){//第八个皇后已经放进去了
			printResult(mr);
			count++;
			return;
		}
		//从当前皇后所在列的0-7试起,直到找到合适的位置
		//没有合适的位置回退
		for(int step = 0;step < fb;step++){
			if(place(mr,curstep,step)){
				mr[curstep][step] =1;
				process(mr,curstep+1);
			}
			mr[curstep][step] = 0;
		}
	}
	
	public static void printResult(int mr[][]){
		for(int i = 0; i < mr.length; i++){
			for(int j = 0; j < mr[i].length;j++){
				System.out.print(mr[i][j]+"    ");
			}
			System.out.println();
		}
		System.out.println("----------------------------");
	}
	public static boolean place(int mr[][],int curstep,int step){
		if(curstep == 0){
			return true;
		}
		//第curstep个皇后在第step列能不能放
		//看一下在前curstep行第step列是否有皇后
		for(int i = 0; i < curstep;i++){
			if(mr[i][step] == 1){
				return false;
			}
		}
		//看一下前curstep行在 step列斜对角上是否有皇后
		//列-列 == 行-行
		for(int a = 0; a < curstep; a++){
			for(int b = 0; b < fb;b++){
				if(Math.abs(curstep-a) == Math.abs(step-b) && mr[a][b]==1){
					return false;
				}
			}
		}
		return true;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值