python写拉斯维加斯+回溯法求n皇后问题
时间: 2024-01-15 16:11:47 浏览: 79
以下是用Python实现拉斯维加斯+回溯法求n皇后问题的代码:
```python
import random
def conflict(state, nextX):
nextY = len(state)
for i in range(nextY):
if abs(state[i] - nextX) in (0, nextY - i):
return True
return False
def queens(num=8, rand=True, show=True):
state = []
for i in range(num):
if rand:
state.append(random.randint(0, num-1))
else:
state.append(-1)
while True:
for nextX in range(num):
if not conflict(state, nextX):
state.append(nextX)
break
else:
if rand:
state[random.randint(0, num-1)] = random.randint(0, num-1)
else:
return state
if len(state) == num:
if show:
print(state)
if not rand:
return state
state = []
for i in range(num):
state.append(random.randint(0, num-1))
queens(8)
```
其中,`conflict(state, nextX)`函数用于判断当前皇后与之前皇后是否有冲突。`queens(num=8, rand=True, show=True)`函数用于求解n皇后问题,其中`num`表示皇后数量,`rand`表示是否采用拉斯维加斯算法,`show`表示是否输出结果。如果`rand`为`False`,则函数采用回溯法求解,否则采用拉斯维加斯算法。
例如,`queens(8)`函数将求解8皇后问题并输出结果。
阅读全文