⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queen8.java

📁 八皇后问题
💻 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 + -