八皇后问题的Scala解法

阅读更多
  好久没做过算法题了,那本《算法导论》都堆了N cm的一层灰了-_-
  废话不多说了,下面是代码:
/**
   &# Queen.scala
   八皇后问题的Scala解法
   @author Eastsun
   @date   2008.5.19
*/
object Queen extends Application{
    solve()
    
    /**
       列出八皇后问题的92中解法
    */
    def solve(){
        var count =0
        
        //ls记录了已放皇后的位置(x,y),x表示行,y表示列
        def solve(ls:List[(Int,Int)]):Unit = {
            if( ls.size == 8 ) printAnswer(ls)
            else{
                var s =ls.size
                for( t <- 0 until 8 )
                    if(ls.forall(i => {
                        var (x,y) =i
                        !(x==s||y==t||x+y==t+s||s-x==t-y)
                       }))  solve((s,t)::ls)
            }
        }
        
        //打印结果,'o'表示皇后
        def printAnswer(an:List[(Int,Int)]){
            count += 1
            println("\n#Answer "+count)
            for(r <- 0 until 8 ){
                for(c <- 0 until 8 ) print(if(an(7-r)._2==c) 'o' else 'x')
                println()
            }
        }
        solve(Nil)
    }
}
  • Queen.rar (603 Bytes)
  • 描述: 代码打包
  • 下载次数: 11

你可能感兴趣的:(Scala,算法,C,C++,C#)