人工智能课讲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)
分享到:
相关推荐
在这个压缩包中,"algorithms-master"可能是一个包含Ruby实现的算法和数据结构的代码库。它可能包括以下内容: 1. **排序算法**:如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等,这些都是处理大量...
5. 回溯法:在寻找所有可能解决方案的问题中,如八皇后问题,回溯法能避免无效路径,找到所有解决方案。 6. 图遍历算法:如深度优先搜索(DFS)和广度优先搜索(BFS),在处理图结构问题时非常有用,例如找出两个...
8. 回溯和深度优先搜索:在解决组合优化问题时,如八皇后问题、N皇后问题、迷宫寻路等,回溯是一种常用的策略。 9. Python3和Ruby语言特性:在解决LeetCode问题时,了解两种语言的独特特性和库,如Python的内置函数...
通过这个 "study_algorithm-master" 学习资源,你将不仅掌握各种算法的实现,还能提升 Ruby 编程技能,理解如何将理论知识转化为实际代码,从而在解决实际问题时游刃有余。记得实践是检验真理的唯一标准,动手编写...
5. **回溯法**:适用于解决组合优化问题,如八皇后问题、N皇后问题、括号匹配等。Ruby的递归和元组功能能很好地支持这类问题的解决。 6. **数据结构**:栈、队列、链表、堆等基础数据结构的实现和应用也是算法题目...
7. **回溯法**:解决组合优化问题如八皇后问题、N皇后问题时,回溯法通过试探性地放置元素并适时撤销,来寻找所有可能的解决方案。 8. **分治策略**:如大整数乘法的Karatsuba算法、快速傅里叶变换(FFT)等,都是...
Python、Perl、Ruby、PHP、C、C++、Java、Nodejs、FreeBasic、FreePascal、D、CSharp(Mono)、Scala、Groovy、Go、Kotlin、Lua、Dart 和 julia。 谁赢? 这不是 100% 清楚; 当然我有测量结果,从这个 C++ 和 C ...
5. **八皇后问题**:该问题是要求在8x8的国际象棋棋盘上放置8个皇后,使得任意两个皇后都无法在同一行、同一列或同一斜线上。递归策略可以用来尝试在每一行放置一个皇后,并检查是否违反任何条件,然后递归地在下一...
本资源包含了书中算法问题的解决方案、注释和Ruby语言实现的代码。 1. **排序算法**:书中详细讲解了冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等多种排序算法。在Ruby中,这些算法的实现各有特点...
在这个项目中,每个棋子(如国王、皇后、车、象、马、兵)可以被定义为一个类,包含各自的属性(位置、移动规则、状态等)和方法(移动、攻击、检查是否合法移动等)。 2. **棋盘表示**:棋盘可以用二维数组或者更...
项目中包含了多种编程语言的实现,如Java、C和Ruby,覆盖了算法和数据结构的多个方面。 描述中的数字"285"可能是指LeetCode上的一个特定问题,但没有提供具体问题的详细信息。然而,我们可以从描述中提取出几个关键...
- **回溯**:用于解决组合优化问题,如八皇后问题、N皇后问题。 - **图算法**:Dijkstra算法、Floyd-Warshall算法、Prim算法等。 3. **竞赛编程相关** - **输入输出**:快速读写,例如使用`scanf`/`printf`等...