Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 462|回复: 0

[算法学习]八皇后问题图形版

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-8 00:05:05 | 显示全部楼层 |阅读模式
    1. 八皇后问题图形版:
    2. //8 Queen 递归算法
    3. //如果有一个Q 为 chess[i]=j;
    4. //则不安全的地方是 k行  j位置,j+k-i位置,j-k+i位置
    5. import java.awt.*;
    6. import java.awt.event.*;
    7. import javax.swing.*;
    8. import javax.swing.event.*;
    9. import java.net.*;
    10. public class Queen2{
    11.   //定义皇后的个数QueenMax,算法的种类oktiemes
    12.   static final int QueenMax = 8;
    13.   static int oktimes = 0;
    14.   static int chess[] = new int[QueenMax];//每一个Queen的放置位置
    15.   public static String []rows=new String[92];//保存算法的字符串
    16.   public static void main(String args[])
    17.   {
    18.     for (int i=0;i< QueenMax;i++)
    19.             chess[i]=-1;                    
    20.     placequeen(0);
    21.     QueenTu queen=new QueenTu();
    22.     System.out.println("
    23. 八皇后共有"+oktimes+"个解法.   作者:孟雪锋、张锐  版本:1.0");
    24.   }
    25. /*
    26. *@功能就是获得每一种方法的字符串,保存在rows数组中,用的是递归方法
    27. */
    28.   public static void placequeen(int num)
    29.   { //num 为现在要放置的行数
    30.     int i=0;
    31.     boolean qsave[] = new boolean[QueenMax];
    32.     for(;i< QueenMax;i++)
    33.             qsave[i]=true;
    34.     i=0;
    35.     //下面先把安全位数组完成
    36.     //i 是现在要检查的数组值
    37.     while (i< num)
    38.     {
    39.       qsave[chess[i]]=false;
    40.       int k=num-i;
    41.       if ( (chess[i]+k >= 0) && (chess[i]+k < QueenMax) )
    42.               qsave[chess[i]+k]=false;
    43.       if ( (chess[i]-k >= 0) && (chess[i]-k < QueenMax) )
    44.               qsave[chess[i]-k]=false;
    45.       i++;
    46.     }
    47.     //下面历遍安全位
    48.     for(i=0;i< QueenMax;i++)
    49.     {
    50.       if (qsave[i]==false)
    51.               continue;
    52.       if (num< QueenMax-1)
    53.       {
    54.         chess[num]=i;
    55.         placequeen(num+1);
    56.       }
    57.       else
    58.       { //num is last one
    59.               chess[num]=i;
    60.               oktimes++;
    61.         //System.out.println("这是第"+oktimes+"个解法 如下:");
    62.               //System.out.println("第n行:  1 2 3 4 5 6 7 8");               
    63.         String row="";
    64.               for (i=0;i< QueenMax;i++)
    65.               {
    66.                       
    67.                        if (chess[i]==0);
    68.                        else
    69.                 for(int j=0;j< chess[i];j++) row+="-";
    70.                 row+="+";
    71.                 int j = chess[i];
    72.                 while(j< QueenMax-1)
    73.                 {
    74.                         row+="-";
    75.                         j++;
    76.                 }
    77.                        rows[oktimes-1]=row;
    78.         }
    79.         
    80.       }
    81.     }
    82.   //历遍完成就停止
    83.   }
    84. }
    85.      //用swing组件显示        
    86.      class QueenTu extends JFrame
    87.      {
    88.              JLabel lab1=new JLabel("第1种解法");
    89.              JPanel pan1=new JPanel();
    90.              JPanel pan2=new JPanel();
    91.              JPanel pan3=new JPanel();
    92.              JButton but1=new JButton("显示");
    93.                 JButton but2=new JButton("清除");
    94.                
    95.                 URL url1=QueenTu.class.getResource("imag1.jpg");
    96.                 URL url2=QueenTu.class.getResource("imag2.jpg");
    97.                 Icon icon1=new ImageIcon(url1);
    98.                 Icon icon2=new ImageIcon(url2);
    99.                 int size=Queen2.QueenMax*Queen2.QueenMax;
    100.                 public JLabel[] lab=new JLabel[size];
    101.                 int i=0;
    102.                 QueenTu()
    103.                 {
    104.                         super("八皇后");
    105.                         addWindowListener(new WindowAdapter(){
    106.                         public void windowClosing(WindowEvent e)
    107.                                                 {System.exit(0);}});
    108.                         initialize();
    109.             }
    110.             public void initialize()
    111.             {
    112.                        
    113.                         pan1.setLayout(new GridLayout(Queen2.QueenMax,Queen2.QueenMax,2,2));
    114.                         pan1.setSize(27*Queen2.QueenMax,86*Queen2.QueenMax);
    115.                         pan2.setSize(50,50);
    116.                         lab1.setForeground(Color.red);
    117.                        
    118.                        
    119.                         for(int j=0;j< size;j++)
    120.                         {
    121.                                 String str;
    122.                                 str=(Queen2.rows[0].substring(j,j+1)).trim();
    123.                                 if(str.equals("+"))
    124.                                         lab[j]=new JLabel(icon2);
    125.                                 else
    126.                                     lab[j]=new JLabel(icon1);
    127.                         }
    128.                         i++;
    129.             but1.addActionListener(new Listener());
    130.             but2.addActionListener(new Listener());
    131.                         for(int i=0;i< size;i++)
    132.                         pan1.add(lab[i]);
    133.                         pan2.add(but1);
    134.                         pan2.add(but2);
    135.                         pan3.add(lab1);
    136.                         getContentPane().add(pan3,BorderLayout.NORTH);
    137.                         getContentPane().add(pan1,BorderLayout.CENTER);
    138.                         getContentPane().add(pan2,BorderLayout.SOUTH);
    139.                         setLocation(300,0);
    140.                         setSize(27*Queen2.QueenMax+50,86*Queen2.QueenMax+50);
    141.                         pan1.setBackground(Color.ORANGE);
    142.                         pan2.setBackground(Color.YELLOW);
    143.                         pan3.setBackground(Color.green);
    144.                         setBackground(Color.MAGENTA);
    145.                         setVisible(true);
    146.                 }
    147.       
    148. class Listener  implements ActionListener
    149. {
    150.         public void actionPerformed(ActionEvent e)
    151.         {
    152.                        
    153.                 if(e.getSource()==but1)
    154.                        
    155.                 if(i< Queen2.oktimes)
    156.                 {
    157.                         for(int j=0;j< size;j++)
    158.                             {
    159.                                 String str;
    160.                                         str=(Queen2.rows[i].substring(j,j+1)).trim();
    161.                                                
    162.                                         if(str.equals("+"))
    163.                                                 lab[j].setIcon(icon2);
    164.                                         else
    165.                                             lab[j].setIcon(icon1);
    166.                                     lab1.setText("第"+(i+1)+"种解法");
    167.                                 }
    168.                                 i++;
    169.                 }
    170.                 else
    171.                 {
    172.                         i=0;
    173.                         for(int j=0;j< size;j++)
    174.                             {
    175.                                 String str;
    176.                                         str=(Queen2.rows[i].substring(j,j+1)).trim();
    177.                                                
    178.                                         if(str.equals("+"))
    179.                                                 lab[j].setIcon(icon2);
    180.                                         else
    181.                                             lab[j].setIcon(icon1);
    182.                                     lab1.setText("第"+(i+1)+"种解法");
    183.                                 }
    184.                                 i++;
    185.                 }
    186.                 if(e.getSource()==but2)
    187.                 {
    188.                         for(int j=0;j< size;j++)
    189.                         {
    190.                                 lab[j].setIcon(icon1);
    191.                         }
    192.                         i=0;
    193.                         lab1.setText("清除");
    194.                 }
    195.                        
    196.                }
    197. }
    198. }
    199. 运行图:
    200. [img]http://img.javaxxz.com/2014/11/8/000504640.gif[/img]

    201.                      
    复制代码

       
         
         
          
          

            
          

            
          
         
       

    1.                         
    复制代码

      


    源码下载:http://file.javaxxz.com/2014/11/8/000504796.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 10:06 , Processed in 0.357812 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表