第一种,好理解
import java.util.Arrays;
public class Queen8 {
// public static int num=0;
// public static int MaxQueen=8;
// public static int[] cols=new int[MaxQueen];
//
// public Queen8()
// {
// getArrangement(0);
// System.out.println("共有"+num+"种摆放方法");
// }
//
// public void getArrangement(int n)
// {
// boolean []rows=new boolean[MaxQueen];
// for(int i=0;i<n;i++)//由前面n-1列的数据 找出第n列所有不合法的行
// {
// rows[cols[i]]=true;
// int d=n-i;
// if(cols[i]-d>=0)
// rows[cols[i]-d]=true;
// if(cols[i]+d<=MaxQueen-1)
// rows[cols[i]+d]=true;
//
// }
//
// for(int i=0;i<MaxQueen;i++)
// {
// if(rows[i])
// continue;
// cols[n]=i;
// if(n<MaxQueen-1)
// {
// getArrangement(n+1);
// }
// else
// {
// num++;
// printChessBoard();
// }
// }
// }
// public void printChessBoard()
// {
// for(int i=0;i<MaxQueen;i++)
// {
// for(int j=0;j<MaxQueen;j++)
// {
// if(i==cols[j])
// {
// System.out.print("0 ");
// }
// else
// System.out.print("+ ");
// }
// System.out.println();
//
// }
// System.out.println("\n");
// }
//
// public static void main(String[] args)
// {
// Queen8 q=new Queen8();
// }
public static final int maxsize=8;
public int []row=new int[maxsize];
public int num=0;
public Queen8()
{
getArrangement(0);
System.out.println("实现八皇后共有"+num+"个方法");
}
public void getArrangement(int n)
{
boolean []col=new boolean[8];
Arrays.fill(col, true);//很重要
for(int i=0;i<n;i++)
{
col[row[i]]=false;
int x=n-i;
if(row[i]-x>=0)
col[row[i]-x]=false;
if(row[i]+x<maxsize)
col[row[i]+x]=false;
}
for(int i=0;i<maxsize;i++)
{
if(!col[i])
{
continue;
}
row[n]=i;
if(n<maxsize-1)
{
getArrangement(n+1);
}
else
{
num++;
printChessBoard();
}
}
}
public void printChessBoard()
{
for(int i=0;i<maxsize;i++)
{
for(int j=0;j<maxsize;j++)
{
if(j==row[i])
{
System.out.print("0 ");
}
else
System.out.print("+ ");
}
System.out.println();
}
System.out.println("\n");
}
public static void main(String[] args)
{
Queen8 q=new Queen8();
}
}
第二种
import java.util.Arrays;
public class Queen8Erwei {
public static int[][] arr=new int[8][8];
public int map=0;
public boolean rule(int[][] arr,int i, int j)
{
if(i==0)
return true;
for(int k=0;k<i;k++)
{
if(arr[k][j]==1)
return false;
}
for(int m=i-1,n=j-1;m>=0&&n>=0;m--,n--)
{
if(arr[m][n]==1)
return false;
}
for(int m=i-1,n=j+1;m>=0&&n<8;m--,n++)
{
if(arr[m][n]==1)
return false;
}
return true;
}
public void find(int i)
{
if(i>7)
{
map++;
print();
return;
}
for(int j=0;j<8;j++)
{
if(rule(arr,i,j))
{
arr[i][j]=1;
find(i+1);
}
arr[i][j]=0;
}
}
public void print()
{
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
if(arr[i][j]==1)
System.out.print("0 ");
else
System.out.print("+ ");
}
System.out.println();
}
System.out.println("\n");
}
public static void main(String[] args)
{
Queen8Erwei q8=new Queen8Erwei();
q8.find(0);
System.out.println("哈哈"+q8.map);
}
}