八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是国际象棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,要求其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?数学王子高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出全部92种解(如果将旋转和对称的解归为一种的话,则一共有12个独立解)。
八皇后问题是回溯算法的经典例子。
下面用批处理实现,至于回溯算法原理,有兴趣的朋友可以参考算法教材:
@echo off
setlocal enabledelayedexpansion
title 八皇后问题 作者MHL QQ1208980380
echo. & echo.
echo 八皇后问题
echo. & echo.
echo. & echo.
for /l %%i in (0,1,14) do (set /a A%%i=B%%i=C%%i=0)
set conter=0
echo 按任意键开始计算 & pause>nul
call :loop 1
echo 共计!conter!个解
echo 解题完毕,按任意键退出。& pause>nul & exit
:loop
for /l %%j in (1,1,8) do (
set /a jian=%%j-%1+7
set /a subtract=B!jian!
set /a jia=%%j+%1
set /a add=C!jia!
if !A%%j!==0 (
if !subtract!==0 (
if !add!=