import numpy as np
class eightqueen():
def __init__(self,n): #n是棋盤的長寬,建構函式
self.n=n
self.arr=np.zeros((n,n)) #全0的二維陣列
def is_valid(self,i,j):
for k in range(0,self.n): #0~n,看看是否合法(能否放旗子)
if self.arr[i][k]==1:
return false
if self.arr[k][j]==1:
return false
if (self.arr.diagonal(offset=j-i) == 1).any()==true: #對角線,i-j 偏移
return false
if (np.fliplr(self.arr).diagonal(offset=self.n-i-j-1).any()) ==true: #反對角線-fliplr,offset:偏移
return false
return true
def putchess(self,x):#從第x行開始放旗子
if x>=self.n: #找到解了,退出迴圈。(如果x》n,則說明放滿了8個棋子,
self.output() #輸出結果
return
for i in range(0,self.n):#迴圈從0到n
if self.is_valid(x,i)==true:
self.arr[x][i]=1 #放上棋子
self.putchess(x+1) #開始下一行嘗試
self.arr[x][i]=0 #回溯,取回棋子
def output(self):
print(self.arr) #輸出結果
print('----------------')
pass
q=eightqueen(8)
q.putchess(0)
q=eightqueen(4)
q.putchess(0)
C語言基於回溯演算法解決八皇后問題的方法
問題描述 八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例 在8x8格的西洋棋棋盤上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。問題求解 採用回溯演算法,即從第一行開始,依次探查可以放置皇后的位置,若找到,則放置皇后,開始探查下一行 ...
八皇后問題的回溯演算法
八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯1850年提出 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。include define maxn 20 int u maxn l 2...
八皇后的演算法實現(回溯法)
前言 1 問題重述 在8x8格的 西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法?2 實現 看不懂在說,應該看得懂啊!都有注釋的說 首先是給出的main程式的入口 八皇后.cpp 定義控制台應用程式的入口點。include stdafx.h...