package com.duoduo.day316;
/**
* 一山不容二虎(n皇后问题)
* 问题描述: 在n*n的棋盘上放置彼此不受攻击的n个皇后,按照规则,皇后可以攻击与之在同行同列同斜线的棋子。故如何放置?
* 问题转化: 以行为主导(每行放置一个则不可能同行)--->在第n行放置第n个皇后,第n个皇后的位置不能与前n-1个皇后同列,同斜线
* 算法设计: 1 定义问题的解空间:{x1,x2...xn} 分量xi表示第i个皇后放置在第i行第xi列 ,xi=1,2...n
* 2 解空间的组织结构: 一棵m(m=n)叉树 树的深度为n (n*n)
* 3 搜索解空间 约束条件--->在第t行放置第t个皇后时,第t个皇后的位置不能和前t-1个皇后同列,同斜线
* 即 xi!=xj不同列 |i-j|!=|xi-xj| 不同斜线
* 限界条件---->不存在方案好坏的情况---->无需设置
* 4 搜索过程 写代码
*
* @author 多多
*
*/
import java.util.Scanner;
import java.math.*;
public class Test5_5 {
static int M=105; //定义默认数组大小
static int n; //表示n个皇后
static int [] x=new int[M]; //x[i]表示第i个皇后放置在第i行第x[i]列
static int countn; &