RSS

scalaで8-queen

とりあえずやってみた。

    付与されたタグ:
  • Scala
object EQ {

	def main(args : Array[String]) : Unit = {
		print ("start\n")		
		for (l <-queens(8)){
			print(l + "\n")
		}	
		print("end")
	}		
	def queens(n: Int): List[List[Int]]= n match {
		case 0 => List(List()): List[List[Int]]
		case n :Int => for ( 
					b <- queens(n-1);
					q <- List.range(0,8);
					if safe(q,b))	yield (q::b)
	}
	def safe(q:Int, b: List[Int]) : Boolean = {
		List.range(0, b.length) forall (i => ! check(q,b,i))
	}
	def check(q : Int, b: List[Int], i:Int) : Boolean = {
		q == b(i) || (q - b(i)).abs == i + 1
	}
}

こんな感じ。