递归之八皇后问题

package com.m.demo7;

public class Quene8 {
	/**
	 * 8行8列,每2个不能在同一行 同一列 同一斜线
	 * 因为不能在同一行,使用一维数组,直接表示列
	 * 同一列判断:数组值不同
	 * 同一斜线判断:等腰直角三角形
	 * 
	 * @param args
	 */
	
	static int maxsize=8;
	static int[] array=new int[maxsize];
	
//	打印数组
	public static void show() {
		for(int item:array) {
			System.out.print(item+" ");
		}
		System.out.println();
	}
//	判断位置是否和之前的在同一列 同一斜线
	public static boolean isPosition(int n) {
		for(int i=0;i<n;i++) {
			if(array[i]==array[n]||Math.abs(i-n)==Math.abs(array[i]-array[n])) {
				return true;
			}
		}
		
		return false;
	}
	
//	8个棋子开始放置位置 :从n个棋子开始放
	public static  void putPosition(int n) {
		if(n==maxsize) {//n=9结束
			show();
			return;
		}else {
			for(int i=0;i<maxsize;i++) {//每一个棋子有8个位置可以放,从0开始放
				array[n]=i;//只有第一个棋子的位置正确,才进入if里面 放下一个棋子
				
				if(!isPosition(n)) {//只有不在同一行同一列同一斜线,位置才正确,然后放下一个棋子,一轮结束有8 个棋子
					
					putPosition(n+1);
				}
					
				
			}
		}
	}
	
	
	
	
	public static void main(String[] args) {
		putPosition(0);

	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值