J2EE之巔

           

          The Clojure Program To solve N Queens Problem

          The following program is about solving N-Queens problem (http://en.wikipedia.org/wiki/Eight_queens_puzzle) by Clojure. If you have the better solution in Clojure or Haskell, welcome to provide your solution.
          (ns queens)
          (defn conflictInRow? [queens newqueen]
            (some #(= newqueen %) queens)
          )
          (defn conflictInDia? [queens newqueen]
            (let [dia (count queens) 
                  n1 (fn [queen] (Math/abs (- dia (.indexOf queens queen))))
                  n2 (fn [queen] (Math/abs (- newqueen queen)))]
              (some #(= (n1 %) (n2 %)) queens)
             )
           )
          (defn conflict? [queens newqueen]
            (or (conflictInRow? queens newqueen) (conflictInDia? queens newqueen))
           )
          (def cnt (atom 0))
          (defn put-queens [queens newqueen boardSize ]
            (if (= (count queens) boardSize)  
              (do
                (println queens)
                (reset! cnt (inc @cnt))
              )
              (do 
                ;(println queens)
                (if (> newqueen boardSize)
               
                     (if (and (= (peek queens) boardSize) (= (count queens) 1))
                         (throw (Exception. (str "That's all " @cnt)))
                         (recur (pop queens) (inc (peek queens)) boardSize )
                     )
               
                  (if (conflict? queens newqueen)
                      
                       (recur queens (inc newqueen) boardSize )
                       
                    (do
                       (put-queens (conj queens newqueen) 1 boardSize )
                       (recur queens (inc newqueen) boardSize )
                     )
                  )
                 )
                )
              )
              
          )
          (defn queens [boardSize] 
              (put-queens [] 1 boardSize)
           )


          Chao Cai (蔡超)

          Sr. Software Dev Engineer 
          Amazon.com

           

          posted on 2012-08-05 23:26 超越巔峰 閱讀(2486) 評論(0)  編輯  收藏 所屬分類: Computer Science


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


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(12)

          隨筆分類(54)

          隨筆檔案(59)

          文章分類(2)

          文章檔案(1)

          相冊

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 福州市| 平度市| 东兰县| 台南市| 剑河县| 商都县| 博爱县| 如东县| 武宁县| 沂源县| 米脂县| 揭东县| 博爱县| 家居| 洪江市| 屏边| 云阳县| 财经| 延寿县| 南充市| 甘德县| 金平| 乌兰察布市| 普安县| 昌平区| 南宫市| 土默特右旗| 丽水市| 广灵县| 保靖县| 井陉县| 永善县| 临夏市| 柳州市| 伊春市| 前郭尔| 井陉县| 郁南县| 沈阳市| 大埔县| 江源县|