***6.22-八皇后问题

来源:互联网 发布:linux创建目录命令 编辑:程序博客网 时间:2024/05/21 09:14

问题及代码:

/*   *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⊙)嗯写了一晚上。。

0 0
原创粉丝点击