Life is filled with wonder

          置頂隨筆 #

          [置頂]八皇后

          寫了兩天,
          應用遞歸和回溯.
          對如何組織類,
          更一步加深
          /Files/xyq002444/Queens.rar
          八皇后主程序的算法
          import java.util.*;

          public class QueenSolver {

              
          private int count;  //皇后的數目
              private Queen queens[];
              
          private Queue<Queen[]> queue;

              
          public QueenSolver(int count) {
                  
          this.count = count;
                  queens 
          = new Queen[count];
                  queue 
          = new QueenList<Queen[]>();
                  
          this.initialize();
                  
          this.process();
              }

              
          //初始化
              private void initialize() {
                  
          for (int i = 0; i < count; i++{
                      queens[i] 
          = new Queen(i + 10);
                  }

              }

              
          //能否放置一個皇后
              private boolean place(Queen queen) {
                  
          for (int i = 0; i < queen.x - 1; i++{
                      
          if (queens[i].y == queen.y || queens[i].getX_Y() == queen.getX_Y() || queens[i].getAddXY() == queen.getAddXY()) {
                          
          return false;
                      }

                  }

                  
          return true;
              }


              
          private void process() {
                  
          int k = 1;
                  queens[k 
          - 1].y = 0;
                  
          while (k > 0{
                      queens[k 
          - 1].y = queens[k - 1].y + 1;
                      
          while (queens[k - 1].y <= count && !this.place(queens[k - 1])) {
                          queens[k 
          - 1].y = queens[k - 1].y + 1;
                      }

                      
          if (queens[k - 1].y <= count) {
                          
          if (k == count) {
                              
          //                   this.printPosition(queens);
                              Queen[] queenClone = new Queen[queens.length];
                              
          for (int i = 0; i < queenClone.length; i++{
                                  queenClone[i] 
          = new Queen(queens[i].x, queens[i].y);
                              }

                              
          for (int i = 0; i < queens.length; i++{
                                  queens[i].setXPosition();
                                  queens[i].setYPosition();
                              }

                              queue.offer(queenClone);
                          }
           else {
                              k 
          = k + 1;
                              queens[k 
          - 1].y = 0;
                          }

                      }
           else {
                          k 
          = k - 1;
                      }

                  }

              }


              
          public void printPosition(Queen[] queens) {
                  
          for (Queen queen : queens) {
                      System.out.println(queen.x 
          + " y: " + queen.y);
                  }

              }


              
          public Queue<Queen[]> getQueue() {
                  
          return this.queue;
              }

          }

          posted @ 2007-12-14 21:14 小屁 閱讀(824) | 評論 (2)編輯 收藏

          僅列出標題  
          主站蜘蛛池模板: 刚察县| 茶陵县| 武宣县| 彩票| 遂川县| 南安市| 瓦房店市| 沙田区| 武宣县| 广德县| 泽州县| 比如县| 定南县| 辽源市| 天水市| 广饶县| 偏关县| 荥阳市| 囊谦县| 海伦市| 五指山市| 日喀则市| 义乌市| 乐清市| 清丰县| 揭西县| 陆良县| 淳化县| 洛南县| 镇安县| 甘泉县| 边坝县| 普宁市| 绥宁县| 霍邱县| 永清县| 剑阁县| 新余市| 沽源县| 新河县| 巴塘县|