可愛的琪琪,開心快樂每一天
          溫馨小屋
          可愛的琪琪,開心快樂每一天
          posts - 7,comments - 39,trackbacks - 0
          ???? 網上看面試題時看到,摘抄別人寫的一個程序,并做了一些注解,翻譯為java版,記錄一下
          package?chenqi;

          /**
          ?*?要求:試編寫程序實現將八個皇后放置在國際象棋棋盤的無沖突的位置上的算法,并給出所有的解。
          ?*?提示:在國際象棋上放置皇后時,任何一個皇后的水平、豎直和斜45o都不能有另一個皇后。
          ?*?解決該問題采用逐次試探的方法,即采用遞歸調用putchess函數的方法。
          ?*?首先將第一個皇后放于第一行第一列,然后開始向下一行遞歸。
          ?*?每一步遞歸中,首先檢測待放置位置是否與已放置的皇后沖突,如不沖突,則進行下一行的放置,
          ?*?否則,選擇該行的下一個位置進行檢測。如整行的位置都沖突,則回到上一行,重新選擇位置源碼:
          ?*?
          @author?Administrator
          ?*
          ?
          */

          public?class?EightQueen?{

          ????
          //8根線代表8列,數組中每個對象存的值表示皇后在該列的位置
          ????int[]?line?=?new?int[8];
          ????
          int?answer=0;
          ????
          ????
          /**
          ?????*?判斷是否有沖突---用試探法,判斷是否與其他列有沖突
          ?????*?
          @param?t
          ?????*?
          @return?返回0表示沒有沖突,返回1表示有沖突
          ?????
          */

          ????
          private?int?Judge(int?t)?{
          ????????
          int?i,?n?=?0;
          ????????
          for?(i?=?0;?i?<?t;?i++)?{
          ????????????
          //第一種沖突情況:2列處于同一行沖突
          ????????????if?(line[i]?==?line[t])?{
          ????????????????n?
          =?1;
          ????????????????
          break;
          ????????????}

          ????????????
          //2列處于斜向上45度對角線沖突
          ????????????if?(line[i]?+?i?==?line[t]?+?t)?{
          ????????????????n?
          =?1;
          ????????????????
          break;
          ????????????}

          ????????????
          //2列處于斜向下45度對角線沖突
          ????????????if?(line[i]?-?i?==?line[t]?-?t)?{
          ????????????????n?
          =?1;
          ????????????????
          break;
          ????????????}

          ????????}

          ????????
          return?n;
          ????}

          ????
          ????
          /**
          ?????*?主要控制函數
          ?????*?
          @param?n
          ?????
          */

          ????
          private?void?control(int?n)
          ????
          {
          ????????
          int?t?=?8;
          ????????
          for?(line[n]?=?0;?line[n]?<?t;?line[n]++)?{
          ????????????
          if?(Judge(n)?==?1)
          ????????????????
          continue;
          ????????????
          else?if?(n?!=?7)
          ????????????????control(n?
          +?1);
          ????????????
          else
          ????????????????show();
          ????????}

          ????}

          ????
          ????
          /**
          ?????*?顯示擺放的結果
          ?????*?
          ?????
          */

          ????
          private?void?show()?{
          ????????
          int?i,?j;
          ????????
          for?(i?=?0;?i?<?8;?i++)?{
          ????????????
          for?(j?=?0;?j?<?8;?j++)?{
          ????????????????
          if?(line[i]?==?j)
          ????????????????????System.out.print(
          "Q");
          ????????????????
          else
          ????????????????????System.out.print(
          "*");
          ????????????}

          ????????????System.out.println();
          ????????}

          ????????answer
          ++;
          ????????System.out.println();
          ????????System.out.println(answer);
          ????}



          ????
          ????
          public?static?void?main(String[]?args)?{
          ????????EightQueen?s?
          =?new?EightQueen();
          ????????s.control(
          0);
          ????????System.out.println(s.answer);
          ????}

          ????
          }

          這段代碼感覺又簡潔又易懂,再次感謝他的作者:
          http://blog.chinaunix.net/u/26924/showart_228365.html
          posted on 2007-02-28 23:38 陳琪 閱讀(469) 評論(0)  編輯  收藏 所屬分類: java

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 娱乐| 永州市| 舟山市| 西华县| 高邑县| 花垣县| 仁怀市| 鄂托克旗| 九龙坡区| 三穗县| 阿瓦提县| 报价| 四平市| 大安市| 房产| 玛曲县| 且末县| 美姑县| 阿坝县| 茂名市| 常州市| 广宗县| 大姚县| 牡丹江市| 曲周县| 旬阳县| 赫章县| 正蓝旗| 贵港市| 拜泉县| 兴文县| 明星| 阜南县| 昭通市| 平罗县| 沧州市| 巩义市| 隆安县| 米泉市| 米林县| 金昌市|