一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 612|回复: 4
收起左侧

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

[复制链接] |试试Instant~ |关注本帖
TonyJang 发表于 2014-7-4 14:51:48 | 显示全部楼层 |阅读模式

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

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小时,是在愚钝在看下去是在浪费时间了
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的文章
我感觉没有讲的比他更好的了
需要用到二进制
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-9 23:59

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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