美文网首页
「8 皇后问题」(Ruby 版)

「8 皇后问题」(Ruby 版)

作者: Pope怯懦懦地 | 来源:发表于2022-07-08 12:06 被阅读0次

45 行搞定✌🏻。

require "set"

def is_nth_valid?(states, row)
    return true if states.empty?
    # 假设 states 已经检查过了,没问题的。

    n = states.size
    
    # chech the rows
    rows_valid = (Set.new([states, row].flatten).size == n + 1)
    return false unless rows_valid

    # check the columns

    # check the diagonal
    # 0
    # 1
    # 2
    # 3
    # 4
    # 5 4 3 2 1 0
    diagonal_valid = true
    states.each_with_index do |s, i|
        diagonal_valid &&= ((s - row).abs != n + 1 - (i + 1))
        return false unless diagonal_valid
    end

    return rows_valid && diagonal_valid
end

def find_8_Q_solution(n)
    return (0..7).to_a.map { |e| [e] } if n == 1

    solutions = []
    find_8_Q_solution(n - 1).each do |states_n_1|
        8.times do |row|
            if is_nth_valid?(states_n_1, row)
                solutions << [states_n_1, row].flatten
            else
                next
            end
        end
    end
    solutions
end

p find_8_Q_solution(8).size  #=> 92

相关文章

  • 「8 皇后问题」(Ruby 版)

    45 行搞定✌?。

  • [Ruby]Ruby入门

    1.编码问题 #!/usr/bin/ruby ------------> Ruby固定#coding=utf-8...

  • 八皇后问题解法

    八皇后问题解法 什么事八皇后问题 国际象棋中的皇后,可以横向、纵向、斜向移动。如何在一个8X8的棋盘上放置8个皇后...

  • 8皇后问题

    首先,可归纳问题的条件为,8皇后之间需满足:1.不在同一行上2.不在同一列上3.不在同一斜线上4.不在同一反斜线上...

  • 8皇后问题

    前言 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8...

  • 八皇后问题 Python实现

    八皇后问题 Python实现 田田田 八皇后问题:国际象棋棋盘是8 * 8的方格,每个方格里放一个棋子。皇后这种棋...

  • 八皇后问题(N皇后问题)

    八皇后问题是一个经典的递归回溯问题。 描述 八皇后问题是在一个 8*8 的棋盘上放置皇后,要求其放置后满足同一行,...

  • 回溯法(排列树)解决八(N)皇后问题

    问题描述: 八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后...

  • [算法]八皇后问题

    问题描述: 八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后...

  • 【算法】用回溯法(backtracking algorithm)

    什么是N-皇后问题? 说到这个N-皇后问题,就不得不先提一下这个历史上著名的8皇后问题啦。 八皇后问题,是一个古老...

网友评论

      本文标题:「8 皇后问题」(Ruby 版)

      本文链接:https://www.haomeiwen.com/subject/tqfvbrtx.html