📄 queen8.java
字号:
/******************************问题描述:******************************
设在初始状态下在国际象棋棋盘上没有任何棋子(皇后)。然后顺序在第一行,第
2行,...第8行上布放棋子。在每一行中有8个可选位置,但在任一时刻,棋盘的
合法布局都必须满足3个限制条件,即任何两个棋子不得放在棋盘的同一行、同一
列、或者同一斜线上。
***********************************************************************/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.*;
public class Queen8
{
/**
* @param args
*/
static int count = 0; //解法的个数
public static void main(String[] args)
{
// TODO Auto-generated method stub
System.out.println("Please input the number of the queens ");
try
{
String str;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
str = in.readLine();
int n = Integer.parseInt(str);
if(n < 4)
{
System.out.println("Sorry!There are so few queens that it isn't worth to do it!");
}
else if(n > 200)
{
System.out.println("Sorry!There are too many queens that I can't solve it!");
}
else
{
int QueenMax;
QueenMax = n;
int chess[] = new int[QueenMax];
for(int i = 0; i < QueenMax; i++)
{
chess[i] = -1;
}
placequeen(0, QueenMax, chess);
System.out.println("\nThere are " + count +
" solutions for the problem " +
QueenMax + "_Queens in total");
}
}
catch(IOException e)
{
}
}
public static void placequeen(int num, int QueenNum, int chess[]) //num 为现在要放置的行数
{
int i=0;
boolean queenSave[] = new boolean[QueenNum];
for(; i < QueenNum; i++)
queenSave[i] = true;
//下面先把安全位数组完成
i=0;//i 是现在要检查的数组值
while (i < num)
{
queenSave[chess[i]] = false;
int k = num-i;
if ( (chess[i]+k >= 0) && (chess[i]+k < QueenNum) )
queenSave[chess[i]+k]=false;
if ( (chess[i]-k >= 0) && (chess[i]-k < QueenNum) )
queenSave[chess[i]-k]=false;
i++;
}
//下面历遍安全位
for(i=0; i<QueenNum; i++)
{
if (queenSave[i] == false)
continue;
if (num < QueenNum-1)
{
chess[num] = i;
placequeen(num+1, QueenNum, chess);
}
else
{ //num is last one
chess[num] = i;
count ++;
System.out.println("");
System.out.println("Solution NO." + count + ":");
for (i=0; i < QueenNum; i++)
{
String row="";
if (chess[i]==0);
else
for(int j=0;j < chess[i];j++)
row+="* ";
row+="Q ";
int j = chess[i];
while(j < QueenNum - 1)
{
row += "* ";
j++;
}
System.out.println(row);
}
}
}
//历遍完成就停止
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -