• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

原创文章,转载请注明:八皇后问题-回溯法(MATLAB) By Lucio.Yang

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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
关于matlab生成随机数发布时间:2022-07-18
下一篇:
[matlab] 1.拟合发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap