题目:
十九世纪著名的数学家高斯提出:在8×8格的国际象棋棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
分析:
其实问题可以转化为12345678的满足某种条件(行已不等,列亦不等,只需设定其不在同一斜线上,即斜率不为 1 或-1 )的排列.
通过前两天用非递归方式解决序列的全排列问题(.http://blog.csdn.net/northwolves/archive/2004/07/21/47601.aspx),在较短的时间内写出如下代码,经测试速度还可以:
代码:
'add a textbox (with multiline=true and scrollbars=2 vertical),and a commandbutton
Private Sub queens8(ByRef result() As String) '计算八皇后问题的过程
Dim i As Long, J As Integer, k As Integer '循环变量
Dim FIT As Boolean '判定是否符合条件
Dim ALL(1 To 8), out(1 To 8) As String '用于输出的数组
Dim TEMP1 As Long, TEMP2 As Integer '进制转换中间变量
For i = 1 To 40320 ' 穷举8!种排列
ALL(1) = 1
TEMP1 = i
For J = 2 To 8
TEMP2 = TEMP1 Mod J '混合进制
TEMP1 = TEMP1 \ J
If TEMP2 = 0 Then
ALL(J) = J 'temp2为 0则放在最后
Else
For k = J To TEMP2 + 1 Step -1
ALL(k) = ALL(k - 1) ' temp2之后的元素后移一位
Next
ALL(TEMP2) = J 'temp2不为 0 则置于第temp2个元素前
End If
Next '至此得到12345678的一个排列
FIT = True '初始化变量
'循环判断有否两个皇后存在互吃
For J = 1 To 8
For k = 8 To 1 Step -1
If Not k = J Then
If Abs((ALL(k) - ALL(J))) = Abs(J - k) Then
FIT = False
GoTo pass '跳出循环
End If
End If
Next
Next
If FIT Then '满足条件时
Num = Num + 1 '输出编号
ReDim Preserve result(1 To Num)
For J = 1 To 8
out(J) = String(8, StrConv("□", vbWide))
Mid(out(J), ALL(J), 1) = StrConv("Q", vbWide)
Next
result(Num) = "第" & Num & "种方法:" & vbCrLf & Join(out, vbCrLf) '输出第 num 种 8个皇后摆放状态
End If
pass:
Next
End Sub
Private Sub Command1_Click()
Dim result() As String
Text1.Text = ""
queens8 result
Text1.Text = Join(result, vbCrLf & vbCrLf)
End Sub
输出:
第1种方法:
□□□□Q□□□
□□□□□□Q□
□Q□□□□□□
□□□□□Q□□
□□Q□□□□□
Q□□□□□□□
□□□Q□□□□
□□□□□□□Q
第2种方法:
□□□Q□□□□
□□□□□□Q□
□□□□Q□□□
□Q□□□□□□
□□□□□Q□□
Q□□□□□□□
□□Q□□□□□
□□□□□□□Q
第3种方法:
□□□□□Q□□
□□□Q□□□□
□□□□□□Q□
Q□□□□□□□
□□Q□□□□□
□□□□Q□□□
□Q□□□□□□
□□□□□□□Q
第4种方法:
□□□□□Q□□
□□Q□□□□□
□□□□Q□□□
□□□□□□Q□
Q□□□□□□□
□□□Q□□□□
□Q□□□□□□
□□□□□□□Q
第5种方法:
□□□□□□□Q
□Q□□□□□□
□□□Q□□□□
Q□□□□□□□
□□□□□□Q□
□□□□Q□□□
□□Q□□□□□
□□□□□Q□□
第6种方法:
□□□□□□□Q
□Q□□□□□□
□□□□Q□□□
□□Q□□□□□
Q□□□□□□□
□□□□□□Q□
□□□Q□□□□
□□□□□Q□□
第7种方法:
□□□□□□□Q
□□Q□□□□□
Q□□□□□□□
□□□□□Q□□
□Q□□□□□□
□□□□Q□□□
□□□□□□Q□
□□□Q□□□□
第8种方法:
□□□□□□□Q
□□□Q□□□□
Q□□□□□□□
□□Q□□□□□
□□□□□Q□□
□Q□□□□□□
□□□□□□Q□
□□□□Q□□□
第9种方法:
□□□□Q□□□
□□□□□□□Q
□□□Q□□□□
Q□□□□□□□
□□Q□□□□□
□□□□□Q□□
□Q□□□□□□
□□□□□□Q□
第10种方法:
□□Q□□□□□
□□□□□□□Q
□□□Q□□□□
□□□□□□Q□
Q□□□□□□□
□□□□□Q□□
□Q□□□□□□
□□□□Q□□□
第11种方法:
□□□□Q□□□
□□□□□□□Q
□□□Q□□□□
Q□□□□□□□
□□□□□□Q□
□Q□□□□□□
□□□□□Q□□
□□Q□□□□□
第12种方法:
□□□Q□□□□
□□□□□□□Q
Q□□□□□□□
□□□□Q□□□
□□□□□□Q□
□Q□□□□□□
□□□□□Q□□
□□Q□□□□□
第13种方法:
□□□Q□□□□
□□□□□□□Q
□□□□Q□□□
□□Q□□□□□
Q□□□□□□□
□□□□□□Q□
□Q□□□□□□
□□□□□Q□□
第14种方法:
□□□□□Q□□
□□□□□□□Q
□Q□□□□□□
□□□Q□□□□
Q□□□□□□□
□□□□□□Q□
□□□□Q□□□
□□Q□□□□□
第15种方法:
□Q□□□□□□
□□□□□□□Q
□□□□□Q□□
Q□□□□□□□
□□Q□□□□□
□□□□Q□□□
□□□□□□Q□
□□□Q□□□□
第16种方法:
□□□Q□□□□
□□□□□□□Q
Q□□□□□□□
□□Q□□□□□
□□□□□Q□□
□Q□□□□□□
□□□□□□Q□
□□□□Q□□□
第17种方法:
□□□Q□□□□
□Q□□□□□□
□□□□□□□Q
□□□□□Q□□
Q□□□□□□□
□□Q□□□□□
□□□□Q□□□
□□□□□□Q□
第18种方法:
□□□□□□Q□
□□Q□□□□□
□□□□□□□Q
□Q□□□□□□
□□□□Q□□□
Q□□□□□□□
□□□□□Q□□
□□□Q□□□□
第19种方法:
□□□Q□□□□
□Q□□□□□□
□□□□□□□Q
□□□□Q□□□
□□□□□□Q□
Q□□□□□□□
□□Q□□□□□
□□□□□Q□□
第20种方法:
□□□Q□□□□
□□□□□Q□□
□□□□□□□Q
□Q□□□□□□
□□□□□□Q□
Q□□□□□□□
□□Q□□□□□
□□□□Q□□□
第21种方法:
Q□□□□□□□
□□□□□Q□□
□□□□□□□Q
□□Q□□□□□
□□□□□□Q□
□□□Q□□□□
□Q□□□□□□
□□□□Q□□□
第22种方法:
□□□□Q□□□
□□Q□□□□□
□□□□□□□Q
□□□Q□□□□
□□□□□□Q□
Q□□□□□□□
□□□□□Q□□
□Q□□□□□□
第23种方法:
□□□□Q□□□
Q□□□□□□□
□□□□□□□Q
□□□Q□□□□
□Q□□□□□□
□□□□□□Q□
□□Q□□□□□
□□□□□Q□□
第24种方法:
□□□□Q□□□
□Q□□□□□□
□□□□□□□Q
Q□□□□□□□
□□□Q□□□□
□□□□□□Q□
□□Q□□□□□
□□□□□Q□□
第25种方法:
□□Q□□□□□
□□□□Q□□□
□□□□□□□Q
□□□Q□□□□
Q□□□□□□□
□□□□□□Q□
□Q□□□□□□
□□□□□Q□□
第26种方法:
□□Q□□□□□
□□□□□Q□□
□□□□□□□Q
Q□□□□□□□
□□□□Q□□□
□□□□□□Q□
□Q□□□□□□
□□□Q□□□□
第27种方法:
□□□Q□□□□
□□□□□Q□□
□□□□□□□Q
□□Q□□□□□
Q□□□□□□□
□□□□□□Q□
□□□□Q□□□
□Q□□□□□□
第28种方法:
□□Q□□□□□
□□□□□Q□□
□□□□□□□Q
Q□□□□□□□
□□□Q□□□□
□□□□□□Q□
□□□□Q□□□
□Q□□□□□□
第29种方法:
□□□□Q□□□
Q□□□□□□□
□□□□□□□Q
□□□□□Q□□
□□Q□□□□□
□□□□□□Q□
□Q□□□□□□
□□□Q□□□□
第30种方法:
Q□□□□□□□
□□□□Q□□□
□□□□□□□Q
□□□□□Q□□
□□Q□□□□□
□□□□□□Q□
□Q□□□□□□
□□□Q□□□□
第31种方法:
□Q□□□□□□
□□□□□Q□□
□□□□□□□Q
□□Q□□□□□
Q□□□□□□□
□□□Q□□□□
□□□□□□Q□
□□□□Q□□□
第32种方法:
□□Q□□□□□
□□□□□Q□□
□□□□□□□Q
□Q□□□□□□
□□□Q□□□□
Q□□□□□□□
□□□□□□Q□
□□□□Q□□□
第33种方法:
□□□□□Q□□
□□Q□□□□□
□□□□Q□□□
□□□□□□□Q
Q□□□□□□□
□□□Q□□□□
□Q□□□□□□
□□□□□□Q□
第34种方法:
□□□□□Q□□
□□Q□□□□□
Q□□□□□□□
□□□□□□□Q
□□□□Q□□□
□Q□□□□□□
□□□Q□□□□
□□□□□□Q□
第35种方法:
□□□Q□□□□
□Q□□□□□□
□□□□Q□□□
□□□□□□□Q
□□□□□Q□□
Q□□□□□□□
□□Q□□□□□
□□□□□□Q□
第36种方法:
□□□□□□Q□
□□□Q□□□□
□Q□□□□□□
□□□□□□□Q
□□□□□Q□□
Q□□□□□□□
□□Q□□□□□
□□□□Q□□□
第37种方法:
□□□□□□Q□
Q□□□□□□□
□□Q□□□□□
□□□□□□□Q
□□□□□Q□□
□□□Q□□□□
□Q□□□□□□
□□□□Q□□□
第38种方法:
□□Q□□□□□
□□□□□□Q□
□Q□□□□□□
□□□□□□□Q
□□□□Q□□□
Q□□□□□□□
□□□Q□□□□
□□□□□Q□□
第39种方法:
□□□Q□□□□
□□□□□□Q□
□□Q□□□□□
□□□□□□□Q
□Q□□□□□□
□□□□Q□□□
Q□□□□□□□
□□□□□Q□□
第40种方法:
□□Q□□□□□
□□□□□□Q□
□Q□□□□□□
□□□□□□□Q
□□□□□Q□□
□□□Q□□□□
Q□□□□□□□
□□□□Q□□□
第41种方法:
Q□□□□□□□
□□□□□□Q□
□□□□Q□□□
□□□□□□□Q
□Q□□□□□□
□□□Q□□□□
□□□□□Q□□
□□Q□□□□□
第42种方法:
□Q□□□□□□
□□□□□□Q□
□□□□Q□□□
□□□□□□□Q
Q□□□□□□□
□□□Q□□□□
□□□□□Q□□
□□Q□□□□□
第43种方法:
□□□Q□□□□
□□□□□□Q□
Q□□□□□□□
□□□□□□□Q
□□□□Q□□□
□Q□□□□□□
□□□□□Q□□
□□Q□□□□□
第44种方法:
□□Q□□□□□
□□□□Q□□□
□Q□□□□□□
□□□□□□□Q
Q□□□□□□□
□□□□□□Q□
□□□Q□□□□
□□□□□Q□□
第45种方法:
□□□Q□□□□
Q□□□□□□□
□□□□Q□□□
□□□□□□□Q
□Q□□□□□□
□□□□□□Q□
□□Q□□□□□
□□□□□Q□□
第46种方法:
□□□□□Q□□
□□□Q□□□□
□Q□□□□□□
□□□□□□□Q
□□□□Q□□□
□□□□□□Q□
Q□□□□□□□
□□Q□□□□□
第47种方法:
□□□□□Q□□
□□Q□□□□□
Q□□□□□□□
□□□□□□□Q
□□□Q□□□□
□Q□□□□□□
□□□□□□Q□
□□□□Q□□□
第48种方法:
□Q□□□□□□
□□□Q□□□□
□□□□□Q□□
□□□□□□□Q
□□Q□□□□□
Q□□□□□□□
□□□□□□Q□
□□□□Q□□□
第49种方法:
□□Q□□□□□
□□□□Q□□□
□Q□□□□□□
□□□□□□□Q
□□□□□Q□□
□□□Q□□□□
□□□□□□Q□
Q□□□□□□□
第50种方法:
□□□Q□□□□
Q□□□□□□□
□□□□Q□□□
□□□□□□□Q
□□□□□Q□□
□□Q□□□□□
□□□□□□Q□
□Q□□□□□□
第51种方法:
□□□□Q□□□
□□Q□□□□□
Q□□□□□□□
□□□□□Q□□
□□□□□□□Q
□Q□□□□□□
□□□Q□□□□
□□□□□□Q□
第52种方法:
□□□□Q□□□
□Q□□□□□□
□□□Q□□□□
□□□□□Q□□
□□□□□□□Q
□□Q□□□□□
Q□□□□□□□
□□□□□□Q□
第53种方法:
□□□□□□Q□
□□□Q□□□□
□Q□□□□□□
□□□□Q□□□
□□□□□□□Q
Q□□□□□□□
□□Q□□□□□
□□□□□Q□□
第54种方法:
□□□□□□Q□
□Q□□□□□□
□□□Q□□□□
Q□□□□□□□
□□□□□□□Q
□□□□Q□□□
□□Q□□□□□
□□□□□Q□□
第55种方法:
□□□□□□Q□
□□Q□□□□□
Q□□□□□□□
□□□□□Q□□
□□□□□□□Q
□□□□Q□□□
□Q□□□□□□
□□□Q□□□□
第56种方法:
□□□□Q□□□
□□□□□□Q□
□Q□□□□□□
□□□Q□□□□
□□□□□□□Q
Q□□□□□□□
□□Q□□□□□
□□□□□Q□□
第57种方法:
□Q□□□□□□
□□□□□□Q□
□□Q□□□□□
□□□□□Q□□
□□□□□□□Q
□□□□Q□□□
Q□□□□□□□
□□□Q□□□□
第58种方法:
Q□□□□□□□
□□□□□□Q□
□□□Q□□□□
□□□□□Q□□
□□□□□□□Q
□Q□□□□□□
□□□□Q□□□
□□Q□□□□□
第59种方法:
□□□□Q□□□
□□□□□□Q□
Q□□□□□□□
□□Q□□□□□
□□□□□□□Q
□□□□□Q□□
□□□Q□□□□
□Q□□□□□□
第60种方法:
□□Q□□□□□
Q□□□□□□□
□□□□□□Q□
□□□□Q□□□
□□□□□□□Q
□Q□□□□□□
□□□Q□□□□
□□□□□Q□□
第61种方法:
□□□□□Q□□
□□Q□□□□□
□□□□□□Q□
□Q□□□□□□
□□□□□□□Q
□□□□Q□□□
Q□□□□□□□
□□□Q□□□□
第62种方法:
□□□□□Q□□
□□□Q□□□□
□□□□□□Q□
Q□□□□□□□
□□□□□□□Q
□Q□□□□□□
□□□□Q□□□
□□Q□□□□□
第63种方法:
□□□□□Q□□
Q□□□□□□□
□□□□Q□□□
□Q□□□□□□
□□□□□□□Q
□□Q□□□□□
□□□□□□Q□
□□□Q□□□□
第64种方法:
□□□□□Q□□
□□□Q□□□□
Q□□□□□□□
□□□□Q□□□
□□□□□□□Q
□Q□□□□□□
□□□□□□Q□
□□Q□□□□□
第65种方法:
□□Q□□□□□
□□□□□Q□□
□Q□□□□□□
□□□□Q□□□
□□□□□□□Q
Q□□□□□□□
□□□□□□Q□
□□□Q□□□□
第66种方法:
□□Q□□□□□
□□□□□Q□□
□□□Q□□□□
Q□□□□□□□
□□□□□□□Q
□□□□Q□□□
□□□□□□Q□
□Q□□□□□□
第67种方法:
□□Q□□□□□
□□□□□Q□□
□□□Q□□□□
□Q□□□□□□
□□□□□□□Q
□□□□Q□□□
□□□□□□Q□
Q□□□□□□□
第68种方法:
□□□□Q□□□
Q□□□□□□□
□□□Q□□□□
□□□□□Q□□
□□□□□□□Q
□Q□□□□□□
□□□□□□Q□
□□Q□□□□□
第69种方法:
□□□Q□□□□
□□□□□Q□□
Q□□□□□□□
□□□□Q□□□
□Q□□□□□□
□□□□□□□Q
□□Q□□□□□
□□□□□□Q□
第70种方法:
□□□□□□Q□
□□□□Q□□□
□□Q□□□□□
Q□□□□□□□
□□□□□Q□□
□□□□□□□Q
□Q□□□□□□
□□□Q□□□□
第71种方法:
□□□□Q□□□
□□□□□□Q□
□□□Q□□□□
Q□□□□□□□
□□Q□□□□□
□□□□□□□Q
□□□□□Q□□
□Q□□□□□□
第72种方法:
□□□□Q□□□
□□□□□□Q□
Q□□□□□□□
□□□Q□□□□
□Q□□□□□□
□□□□□□□Q
□□□□□Q□□
□□Q□□□□□
第73种方法:
□□□□□Q□□
□□Q□□□□□
□□□□□□Q□
□□□Q□□□□
Q□□□□□□□
□□□□□□□Q
□Q□□□□□□
□□□□Q□□□
第74种方法:
□□□□□Q□□
□□Q□□□□□
□□□□□□Q□
□Q□□□□□□
□□□Q□□□□
□□□□□□□Q
Q□□□□□□□
□□□□Q□□□
第75种方法:
□□□□□Q□□
□Q□□□□□□
□□□□□□Q□
Q□□□□□□□
□□□Q□□□□
□□□□□□□Q
□□□□Q□□□
□□Q□□□□□
第76种方法:
□□□Q□□□□
□Q□□□□□□
□□□□□□Q□
□□Q□□□□□
□□□□□Q□□
□□□□□□□Q
Q□□□□□□□
□□□□Q□□□
第77种方法:
□□□Q□□□□
□Q□□□□□□
□□□□□□Q□
□□Q□□□□□
□□□□□Q□□
□□□□□□□Q
□□□□Q□□□
Q□□□□□□□
第78种方法:
□Q□□□□□□
□□□□Q□□□
□□□□□□Q□
Q□□□□□□□
□□Q□□□□□
□□□□□□□Q
□□□□□Q□□
□□□Q□□□□
第79种方法:
□Q□□□□□□
□□□□Q□□□
□□□□□□Q□
□□□Q□□□□
Q□□□□□□□
□□□□□□□Q
□□□□□Q□□
□□Q□□□□□
第80种方法:
□□□Q□□□□
□Q□□□□□□
□□□□□□Q□
□□□□Q□□□
Q□□□□□□□
□□□□□□□Q
□□□□□Q□□
□□Q□□□□□
第81种方法:
□□□□□Q□□
□□Q□□□□□
Q□□□□□□□
□□□□□□Q□
□□□□Q□□□
□□□□□□□Q
□Q□□□□□□
□□□Q□□□□
第82种方法:
□Q□□□□□□
□□□□□Q□□
Q□□□□□□□
□□□□□□Q□
□□□Q□□□□
□□□□□□□Q
□□Q□□□□□
□□□□Q□□□
第83种方法:
□□□□Q□□□
□□Q□□□□□
Q□□□□□□□
□□□□□□Q□
□Q□□□□□□
□□□□□□□Q
□□□□□Q□□
□□□Q□□□□
第84种方法:
□□□□Q□□□
□Q□□□□□□
□□□Q□□□□
□□□□□□Q□
□□Q□□□□□
□□□□□□□Q
□□□□□Q□□
Q□□□□□□□
第85种方法:
□□□□□□Q□
□Q□□□□□□
□□□□□Q□□
□□Q□□□□□
Q□□□□□□□
□□□Q□□□□
□□□□□□□Q
□□□□Q□□□
第86种方法:
□□□□Q□□□
□□□□□□Q□
□Q□□□□□□
□□□□□Q□□
□□Q□□□□□
Q□□□□□□□
□□□□□□□Q
□□□Q□□□□
第87种方法:
□□□Q□□□□
□□□□□□Q□
□□□□Q□□□
□□Q□□□□□
Q□□□□□□□
□□□□□Q□□
□□□□□□□Q
□Q□□□□□□
第88种方法:
□□Q□□□□□
□□□□Q□□□
□□□□□□Q□
Q□□□□□□□
□□□Q□□□□
□Q□□□□□□
□□□□□□□Q
□□□□□Q□□
第89种方法:
□□□□□Q□□
□Q□□□□□□
□□□□□□Q□
Q□□□□□□□
□□Q□□□□□
□□□□Q□□□
□□□□□□□Q
□□□Q□□□□
第90种方法:
□□Q□□□□□
□□□□□Q□□
□Q□□□□□□
□□□□□□Q□
Q□□□□□□□
□□□Q□□□□
□□□□□□□Q
□□□□Q□□□
第91种方法:
□□Q□□□□□
□□□□□Q□□
□Q□□□□□□
□□□□□□Q□
□□□□Q□□□
Q□□□□□□□
□□□□□□□Q
□□□Q□□□□
第92种方法:
□□□□Q□□□
□Q□□□□□□
□□□□□Q□□
Q□□□□□□□
□□□□□□Q□
□□□Q□□□□
□□□□□□□Q
□□Q□□□□□
分享到:
相关推荐
八皇后问题 c++ 八皇后问题 c++ 八皇后问题 c++
八皇后问题是一个经典的计算机编程问题,它涉及到回溯算法、数据结构和图形用户界面的设计。在C++中,特别是结合MFC(Microsoft Foundation Classes)框架,可以创建具有用户友好界面的程序来解决此问题。 首先,...
作业代码,汇编写八皇后问题,自己写了一份,在网上找的也在里面
用回溯求解法求解八皇后问题,经典问题matlab实现,欢迎大家下载
C语言实现八皇后问题 C语言实现八皇后问题是指使用C语言编写程序来解决八皇后问题,这是一个经典的算法问题。八皇后问题是指在8x8的棋盘上摆放8个皇后,使得每个皇后都不会受到其他皇后的攻击,即不能在同一行、同...
linux c语言实现八皇后问题。希望对你的学习
解决八皇后问题的源码,带有注释,由于数据结构即算法的学习,如有其他需要,请留言
八皇后问题课程设计论文
### 八皇后问题详解 #### 一、八皇后问题背景 八皇后问题是一个经典的计算机科学问题,也是数学领域中一个有趣的挑战。这个问题来源于国际象棋的背景:如何在一个8×8的国际象棋棋盘上放置八个皇后,使得没有任何...
八皇后问题 数据结构八皇后问题 数据结构八皇后问题 数据结构八皇后问题 数据结构八皇后问题 数据结构八皇后问题 数据结构八皇后问题 数据结构
C语言八皇后问题
八皇后问题 递归算法 可以输入皇后的值 输出排列的结果
八皇后问题是一个著名的棋盘放置问题,要求在8×8的棋盘上摆放8个皇后,使得任意两个皇后都不能在同一行、同一列或同一对角线上。下面将详细解释这些方法以及它们在八皇后问题中的应用。 1. 爬山法: 爬山法是一种...
经典的算法,八皇后问题,c++实现,回溯法
数据结构八皇后问题实验报告是一份详尽的项目文档,主要涵盖了八皇后问题的解决方案,该问题是一个经典的计算机科学和算法问题,源自国际象棋。报告的作者花费了两周时间完成,显然投入了大量的精力和思考。 八皇后...
八皇后问题是计算机科学中一个经典的回溯算法应用实例,它要求在8×8的棋盘上摆放8个皇后,使得任何两个皇后都无法在同一行、同一列或同一对角线上互相攻击。这个问题最早由数学家路易斯·卡洛在19世纪提出,至今...
八皇后问题八皇后问题八皇后问题八皇后问题八皇后问题八皇后问题八皇后问题八皇后问题八皇后问题
八皇后问题 ,程序代码 八皇后问题 ,程序代码 八皇后问题 ,程序代码
个人写的一个八皇后问题,有需要的,可以下载。用C++编写的!
一个C语言编写的求解八皇后问题,用回朔法实现