文档详情

八皇后问题图形版.doc

发布:2017-02-10约4.75千字共5页下载文档
文本预览下载声明
八皇后问题图形版: //8 Queen 递归算法 //如果有一个Q 为 chess[i]=j; //则不安全的地方是 k行 j位置,j+k-i位置,j-k+i位置 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.net.*; public class Queen2{ //定义皇后的个数QueenMax,算法的种类oktiemes static final int QueenMax = 8; static int oktimes = 0; static int chess[] = new int[QueenMax];//每一个Queen的放置位置 public static String []rows=new String[92];//保存算法的字符串 public static void main(String args[]) { for (int i=0;i QueenMax;i++) chess[i]=-1; placequeen(0); QueenTu queen=new QueenTu(); System.out.println(\n八皇后共有+oktimes+个解法. 作者:孟雪锋、张锐 版本:1.0); } /* *@功能就是获得每一种方法的字符串,保存在rows数组中,用的是递归方法 */ public static void placequeen(int num) { //num 为现在要放置的行数 int i=0; boolean qsave[] = new boolean[QueenMax]; for(;i QueenMax;i++) qsave[i]=true; i=0; //下面先把安全位数组完成 //i 是现在要检查的数组值 while (i num) { qsave[chess[i]]=false; int k=num-i; if ( (chess[i]+k = 0) (chess[i]+k QueenMax) ) qsave[chess[i]+k]=false; if ( (chess[i]-k = 0) (chess[i]-k QueenMax) ) qsave[chess[i]-k]=false; i++; } //下面历遍安全位 for(i=0;i QueenMax;i++) { if (qsave[i]==false) continue; if (num QueenMax-1) { chess[num]=i; placequeen(num+1); } else { //num is last one chess[num]=i; oktimes++; //System.out.println(这是第+oktimes+个解法 如下:); //System.out.println(第n行: 1 2 3 4 5 6 7 8); String row=; for (i=0;i QueenMax;i++) { if (chess[i]==0); else for(int j=0;j chess[i];j++) row+=-; row+=+; int j = chess[i]; while(j QueenMax-1) { row+=-; j++; } rows[oktimes-1]=row; } } } //历遍完成就停止 } } //用swing组件显示 class QueenTu extends JFrame { JLabel lab1=new JLab
显示全部
相似文档