八皇后问题-回溯法(matlab)

1.问题描述

  八皇后问题是十九世纪著名数学家高斯于1850年提出的。问题是:在8*8的棋盘上摆放8个皇后,使其不能互相攻击,即任意的两个皇后不能处在同意行,同一列,或同意斜线上。

2.matlab代码

function PlaceQueen(row,stack,N)%回溯法放置皇后

if row>N

    PrintQueen(N,stack);%打印棋盘

else

    for col=1:N

        stack(row)=col;

        if row==1||Conflict(row,col,N,stack)%检测是否冲突

            PlaceQueen(row+1,stack,N);

        end

        stack(row)=0;

    end

end 

%子函数:检测冲突

function result=Conflict(row,col,N,stack)%检测是否冲突

result=1;

for i=1:row-1

    if stack(i)~=0

        if ((stack(i)==col)||(abs(row-i)==abs(col-stack(i))))%是否产生冲突:在同一直线,斜线上

            result=0;

            break;

        end

        if result==0

            break;

        end

    end

end

%子函数:打印棋盘信息

function PrintQueen(N,stack)

global solutionNum; %定义全局变量,来累积方法数

solutionNum=solutionNum+1;  

disp(['第',num2str(solutionNum),'种方法:'])

for i=1:N

    for j=1:N

        if j==stack(i)

            fprintf('1   ')

        else

            fprintf('0   ')

        end

    end

    fprintf('\n')

end
PlaceQueen.m
clear all

clc

 

global solutionNum;

solutionNum=0;%全局变量记录方法数

N=8;%皇后个数

%matrix=zeros(N);%存储皇后位置信息

stack=[0 0 0 0 0 0 0 0];

PlaceQueen(1,stack,N)%调用放置方法
queen.m

 

你可能感兴趣的:(matlab)