您的位置:首页 > 编程语言 > Java开发

***6.22-八皇后问题

2015-10-09 20:24 591 查看
问题及代码:

/*
*Copyright (c)2015,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:Queen.java
*作    者:单昕昕
*完成日期:2015年10月9日
*版 本 号:v1.0
*
*问题描述:列出八皇后问题的所有情况
*程序输入:无。
*程序输出:八皇后问题的所有情况。
*/
import java.util.*;
import java.util.Scanner;
public class Test
{
public final static int[][]map=new int[8][8];  //是否有皇后的标记数组
public static int casenum=1;  //解决方案的个数
public static void dfs(int row)  //列举出2种情况,从行入手
{
int column;
for (column=0; column<8; column++)  //依次列举八列
{
map[row][column]=1;  //标记皇后位置
if (row==0||check(row,column)==0)
{
if (row<7)  //当行没有列举完的时候继续列举
dfs(row+1);
else  //列举到第八行后输出
print();
}
map[row][column]=0;  //取消标记
}
}
public static int check(int row,int column)//检查行列对角线
{
int i;
for (i=1; i<8; i++)
//本行之前的该列某一行有皇后(上) //本列之前的该行某一列有皇后(左)    //本列之后的该行某一列有皇后(右)   //左上对角线
if((row-i>=0&&map[row-i][column]==1)||(column-i>=0&&map[row][column-i]==1)||(column+i<8&&map[row][column+i]==1)||(row-i>=0&&column-i>=0&&map[row-i][column-i]

==1)||(row-i>=0&&column+i<8&&map[row-i][column+i]==1))  //右上对角线
return 1;
return 0;
}
public static void print()//输出各种情况
{
int i,j;
System.out.println("case:"+casenum);
++casenum;  //方案个数加一
for (i=0; i<8; i++)
{
System.out.print("|");
for (j=0; j<8; j++)
{
if (map[i][j]==1)  //有皇后用Q表示
System.out.print("Q|");
else
System.out.print(" |");
}
System.out.println("\n");
}
System.out.println("\n");
}
public static void main(String[] args)
{
dfs(0); //从第一行开始
}
}

 

 

运行结果:





知识点总结:

DFS。

学习心得:

(⊙v⊙)嗯写了一晚上。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 八皇后