`
DigitalSonic
  • 浏览: 213623 次
社区版块
存档分类
最新评论

皇后问题的Ruby实现

阅读更多

        人工智能课讲4皇后问题,数据结构做8皇后,索性棋盘大小可变,用100行的Ruby代码写了皇后问题的实现。

Queens.rb


 

class Queen
 @@Chessboard = nil
 
 def initialize(size)
  @@Chessboard = Array.new(size)
  puts "The chessboard is #{size} * #{@@Chessboard.size}.\n"
  i = 0
  flag = FALSE
  while i < size do
   @@Chessboard[0] = i
   if putQueen(1)
    flag = TRUE
    break
   else
    @@Chessboard = Array.new(size)
   end
   i += 1
  end
  
  if flag
   printBoard()
  else
   puts "Can\'t find a solution.\n"
  end
 end
  
 private
 def putQueen(line)
  flag = FALSE
  i = 0
  while i < @@Chessboard.size do
   @@Chessboard[line] = i
   if !check(line, i)
    i += 1
    @@Chessboard[line] = nil
    next
   end
   
   if line < @@Chessboard.size - 1
    if putQueen(line + 1)
     flag = TRUE
     break
    end
   else
    flag = TRUE
    break
   end
   i += 1
  end
  return flag
 end
 
 def check(row, col)
  flag = TRUE
  i = 0
  while i < @@Chessboard.size
   if @@Chessboard[i] == nil
    break
   end  
   if i == row
    i += 1
    next
   end
   if @@Chessboard[i] == col || (@@Chessboard[i] - col).abs == (row - i).abs
    flag = FALSE
    break
   end
   i += 1
  end
  return flag
 end
 
 def printBoard
  m = 0;
  while m < @@Chessboard.size
   n = 0
   while n < @@Chessboard[m]
    print 'X '
    n += 1
   end
   print 'Q '
   n = @@Chessboard[m]
   while n < @@Chessboard.size - 1
    print 'X '
    n += 1
   end
   print "\n"
   m += 1
  end
 end
end

print 'Please input the size of the chessboard(<10):'
a = gets
if a.to_i >= 10
 a = "8"
end
q = Queen.new(a.to_i)
 
分享到:
评论

相关推荐

    Ruby算法和数据结构。C扩展_Ruby_C_下载.zip

    在这个压缩包中,"algorithms-master"可能是一个包含Ruby实现的算法和数据结构的代码库。它可能包括以下内容: 1. **排序算法**:如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等,这些都是处理大量...

    DataStructures:Ruby 中的数据结构和算法

    5. 回溯法:在寻找所有可能解决方案的问题中,如八皇后问题,回溯法能避免无效路径,找到所有解决方案。 6. 图遍历算法:如深度优先搜索(DFS)和广度优先搜索(BFS),在处理图结构问题时非常有用,例如找出两个...

    leetcode分类-leetcode-challenges:Ruby和Python3中的LeetCode解决方案

    8. 回溯和深度优先搜索:在解决组合优化问题时,如八皇后问题、N皇后问题、迷宫寻路等,回溯是一种常用的策略。 9. Python3和Ruby语言特性:在解决LeetCode问题时,了解两种语言的独特特性和库,如Python的内置函数...

    study_algorithm

    通过这个 "study_algorithm-master" 学习资源,你将不仅掌握各种算法的实现,还能提升 Ruby 编程技能,理解如何将理论知识转化为实际代码,从而在解决实际问题时游刃有余。记得实践是检验真理的唯一标准,动手编写...

    Personal-algorithm-question

    5. **回溯法**:适用于解决组合优化问题,如八皇后问题、N皇后问题、括号匹配等。Ruby的递归和元组功能能很好地支持这类问题的解决。 6. **数据结构**:栈、队列、链表、堆等基础数据结构的实现和应用也是算法题目...

    算法

    7. **回溯法**:解决组合优化问题如八皇后问题、N皇后问题时,回溯法通过试探性地放置元素并适时撤销,来寻找所有可能的解决方案。 8. **分治策略**:如大整数乘法的Karatsuba算法、快速傅里叶变换(FFT)等,都是...

    java8集合源码-concept-queen:不同语言的皇后算法

    Python、Perl、Ruby、PHP、C、C++、Java、Nodejs、FreeBasic、FreePascal、D、CSharp(Mono)、Scala、Groovy、Go、Kotlin、Lua、Dart 和 julia。 谁赢? 这不是 100% 清楚; 当然我有测量结果,从这个 C++ 和 C ...

    recursion_exercises

    5. **八皇后问题**:该问题是要求在8x8的国际象棋棋盘上放置8个皇后,使得任意两个皇后都无法在同一行、同一列或同一斜线上。递归策略可以用来尝试在每一行放置一个皇后,并检查是否违反任何条件,然后递归地在下一...

    algorithm_design_manual:Skiena 算法设计手册的解决方案和内容

    本资源包含了书中算法问题的解决方案、注释和Ruby语言实现的代码。 1. **排序算法**:书中详细讲解了冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等多种排序算法。在Ruby中,这些算法的实现各有特点...

    在这个项目中,每个棋子(如国王、皇后、车、象、马、兵)可以被定义为一个类,包含各自的属性(位置、移动规则、状态等)和方法(移动、攻击、检查是否合法移动等)。 2. **棋盘表示**:棋盘可以用二维数组或者更...

    leetcode285-OJProjects:我的OJProjects解决方案,包括Leetcode、googleOJ

    项目中包含了多种编程语言的实现,如Java、C和Ruby,覆盖了算法和数据结构的多个方面。 描述中的数字"285"可能是指LeetCode上的一个特定问题,但没有提供具体问题的详细信息。然而,我们可以从描述中提取出几个关键...

    ac-library.cr:ac-library到Crystal编程语言的移植

    - **回溯**:用于解决组合优化问题,如八皇后问题、N皇后问题。 - **图算法**:Dijkstra算法、Floyd-Warshall算法、Prim算法等。 3. **竞赛编程相关** - **输入输出**:快速读写,例如使用`scanf`/`printf`等...

Global site tag (gtag.js) - Google Analytics