八皇后究竟有多少种解法?怎么解?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八皇后究竟有多少种解法?怎么解?相关的知识,希望对你有一定的参考价值。

参考技术A 这样算是最佳解

class Queen8

static final int QueenMax = 8;
static int oktimes = 0;
static int chess[] = new int[QueenMax];

public static void main(String args[])
for (int i=0;i<QueenMax;i++)chess[i]=-1;
placequeen(0);
System.out.println("\n\n\n八皇后共有"+oktimes+"个解法 made by yifi 2003");


public static void placequeen(int num)

int i=0;
boolean qsave[] = new boolean[QueenMax];
for(;i<QueenMax;i++) qsave[i]=true;

i=0;
while (i<num)
qsave[chess[i]]=false;
int k=num-i;
if ( (chess[i]+k >= 0) && (chess[i]+k < QueenMax) ) qsave[chess[i]+k]=false;
if ( (chess[i]-k >= 0) && (chess[i]-k < QueenMax) ) qsave[chess[i]-k]=false;
i++;

for(i=0;i<QueenMax;i++)
if (qsave[i]==false)continue;
if (num<QueenMax-1)
chess[num]=i;
placequeen(num+1);

else //num is last one
chess[num]=i;
oktimes++;
System.out.println("这是第"+oktimes+"个解法 如下:");
System.out.println("第n行: 1 2 3 4 5 6 7 8");

for (i=0;i<QueenMax;i++)
String row="第"+(i+1)+"行: ";
if (chess[i]==0);
else
for(int j=0;j<chess[i];j++) row+="--";
row+="++";
int j = chess[i];
while(j<QueenMax-1)row+="--";j++;
System.out.println(row);





多少种解法就不好说了..
参考技术B 总共92中解法
# 回溯算法
def NQueens(n):
def checkBoard(rowIndex):
for i in range(rowIndex):
if cols[i] == cols[rowIndex]:
return False
if abs(cols[i] - cols[rowIndex]) == rowIndex - i:
return False
return True

def helper(rowIndex):
if rowIndex == n:
board = [[0 for _ in range(n)] for _ in range(n)]
for i in range(n):
board[i][cols[i]] = 1
res.append(board)
return
for i in range(n):
cols[rowIndex] = i
if checkBoard(rowIndex):
helper(rowIndex + 1)

cols = [False for _ in range(n)]
res = []
helper(0)
return res

if __name__ == '__main__':
li = NQueens(8)
for i in range(len(li)):
print(f'i+1:li[i]')
# for j in range(len(li[i])):
# print(li[i][j])
# print()
参考技术C 一共有92种回答,我只写出了一种,是c1e2b3h4a5g6d7f8。 参考技术D 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
  对于八皇后问题的实现,如果结合动态的图形演示,则可以使算法的描述更形象、更生动,使教学能产生良好的效果。下面是用Turbo C实现的八皇后问题的图形程序,能够演示全部的92组解。八皇后问题动态图形的实现

以上是关于八皇后究竟有多少种解法?怎么解?的主要内容,如果未能解决你的问题,请参考以下文章

回溯法解决八皇后问题

回溯法解决八皇后问题

八皇后问题

什麽是“八皇后问题”?

八皇后问题是啥问题呀

八皇后问题算法详解