欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

八皇后问题的Scala解法 博客分类: 函数式语言 Scala算法CC++C# 

程序员文章站 2024-02-16 21:35:04
...
  好久没做过算法题了,那本《算法导论》都堆了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