本來想在晚上把連連看的棋盤生成部分完成了的,不過貌似做不到了

          算法是每次隨機填入一個元素,然后按順序找到能和它連接的一個空格填入同一個元素(如果找不到就回溯),填下一個元素。
          也就是說填入的位置中有一個隨機數,另一個按有序表1..n生成,這個算法應該能保證解的可行性并能覆蓋所有的情況吧(再把1..n元素的位置隨機排一下應該能覆蓋了)
          每次在填數前先判斷是否有無法被連接的空格,這個剪枝效果很好。

          還想到一種算法,先隨機排滿,然后消去所有能夠連接到的對子,剩下的隨機交換位置,再次消去能夠連接的對子,直到全部消去為止。貌似這個算法不錯,復雜度應該是O(k*n*m),n,m為行列,k為平均每次為了消去對子所需的交換次數,和隨機序列的好壞有關,速度應該相當快了。

          細節方面有個判斷對子是否連接的函數,這個函數我是通過三次“擴張”解決的,首先從其中一個位置出發,向四周擴張,直到碰到“障礙物”;第二次從上一次擴張到的每個點出發,再次向四周擴張;然后再做一次就行。然后就只要判斷另外一個棋子是否在這個位置的“殖民地”上就行(呵呵,Thinking in Zerg,恩)。當然棋盤的周圍還要有一圈無障礙的空間。

          小結
          1. tempMap = (int[][])(map.clone());
          并不是把map[][]的所有元素賦值給tempMap,但是(tempMap == map)的結果又是false,很奇怪
          后來只好用兩重循環寫了個
          現在分析一下
          tempMap -< reference[] -< int[][]
          reference -< int[]
          map[][]相當于一個指向int[]的reference數組,而clone的作用可能僅僅把每一個reference賦值給了tempMap,因此tempMap本身的reference并沒有變,因此tempMap != map;但是改動了tempMap中的某個元素以后,由于reference[]指向的地址和map[][]的地址一樣,因此map數組中的元素也會變動
          不知道這么理解對不對

          2. Java 里方法不能嵌套?比如
          Board() {
          void DFS(int step) {
          }
          }
          這樣貌似不可以?


          posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          1.30 Java notes

          Posted on 2007-04-22 20:23 ZelluX 閱讀(125) 評論(0)  編輯  收藏 所屬分類: OOP
          2007-01-30 23:59:59
          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 古蔺县| 通山县| 瑞安市| 嵊州市| 甘肃省| 邹城市| 将乐县| 桂平市| 文昌市| 温泉县| 洛川县| 西吉县| 武穴市| 彭水| 凤阳县| 抚松县| 临泽县| 堆龙德庆县| 旅游| 雅安市| 黑山县| 黄石市| 平顺县| 九龙县| 武邑县| 四子王旗| 喀什市| 衡东县| 宁化县| 南岸区| 搜索| 鸡西市| 礼泉县| 乌鲁木齐县| 肃宁县| 石家庄市| 西丰县| 多伦县| 宁晋县| 怀柔区| 望谟县|