📣 VIP通行证夏日特惠 限时立减$68
查看: 1660| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

【学JAVA中】问一下八皇后问题,是在看不懂了

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
本帖最后由 TonyJang 于 2014-7-4 17:20 编辑
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
复制代码
这两啥意思啊?百度搜的根本就不知所云,google上不了......大牛能清晰易懂的讲讲吗?

完整代码:
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;


  3. public class Queen
  4. {
  5.      static int x;//皇后数目
  6.      int p=0;//成功摆放x个皇后的方法数
  7.      int[] m=new int[x];//用来存储棋子的行位置,m[i]=i表示第i行
  8.      int[] n=new int[x];//用来存储棋子的列位置,n[i]=i表示第i列
  9.      public Queen()
  10.      {
  11.          setQueen(0);//调用皇后摆放函数摆放第一个皇后
  12.          if(p==0)//假如当前设置的皇后数目没有摆放方法
  13.          {
  14.              System.out.println("此皇后数目没有成功摆放方法!");
  15.          }
  16.      }
  17.      public void setQueen(int i)//摆放皇后位置函数,i表示当前摆放的皇后是第i+1个皇后
  18.      {
  19.          for (m[i]=i,n[i]=0;n[i]<x;n[i]++)
  20.          {
  21.              if(i>0)
  22.              {
  23.                  if (testQueen(i))//调用测试函数测试当前皇后的试探位置是否满足条件
  24.                     {
  25.                      if(i==(x-1))//当第X个皇后满足条件时,输出这X个皇后
  26.                      {
  27.                          p++;
  28.                          for (int j=0;j<x;j++)
  29.                             {
  30.                              for (int c=0;c<n[j];c++)
  31.                              {
  32.                                     System.out.print("○ ");// ○ :表示棋盘上不是皇后的棋子
  33.                              }
  34.                              
  35.                              System.out.print("● ");// ●:表示棋盘上的皇后
  36.                           for (int d=0;d<(x-1-n[j]);d++)
  37.                              {
  38.                                     System.out.print("○ ");
  39.                              }
  40.                              System.out.println();
  41.                          }
  42.                          System.out.println("目前成功摆放方法数是:"+p);
  43.                          continue;
  44.                      }
  45.                      setQueen(i+1);//递归调用
  46.                    }
  47.                     else
  48.                     {
  49.                       continue;
  50.                   }   
  51.              }
  52.              else
  53.              {
  54.                  setQueen(i+1);//递归调用
  55.              }        
  56.          }
  57.      }
  58.         public boolean testQueen(int a)//测试当前皇后是否满足条件   
  59.      {
  60.          for (int i=0;i<a;i++)
  61.          {
  62.              if (n[i]==n[a]||Math.abs(m[i]-m[a])==Math.abs(n[i]-n[a]))//与当前皇后之前的所有皇后的列数相同或者行差绝对值等于列差绝对值时则不满足条件
  63.              {
  64.                  return false;
  65.              }
  66.          }
  67.          return true;
  68.      }
  69.         public static void main(String[] args) throws Exception
  70.      {
  71.             System.out.print("输入皇后数目:");
  72.             BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));//输入皇后个数X
  73.         
  74.             x=Integer.parseInt(bfr.readLine());
  75.          new Queen();
  76.      }
  77. }
复制代码
求看懂的大牛能录一段解说详细说说每行的意思吗,LZ转CS的已经研究了8小时,是在愚钝在看下去是在浪费时间了

上一篇:迷宫的小问题,大家帮忙看一下,加大米
下一篇:Recursion题目求解
🔗
 楼主| TonyJang 2014-7-4 15:04:38 | 只看该作者
本楼:
全局:
本帖最后由 TonyJang 于 2014-7-4 17:21 编辑

。。。。。。。。。。。。。。。。。。。。。。
回复

使用道具 举报

🔗
tiexiong 2014-7-4 15:06:14 | 只看该作者
回复

使用道具 举报

🔗
阿兰阿兰 2014-7-4 16:01:38 | 只看该作者
全局:
欧这章我看的比较水。
这两个就是java包里边已经帮你写好的,导入这两个头文件,才能够时这个语句BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in)); 通过编译 。
就是头文件而已,作用和import java.util; 是一样的。
回复

使用道具 举报

🔗
miss_snow 2014-10-10 23:07:32 | 只看该作者
全局:
八皇后问题强烈推荐lz你看matrix67的文章
我感觉没有讲的比他更好的了
需要用到二进制
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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