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


    原创文章,转载请注明:八皇后问题-回溯法(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('
    ')
    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
  • 相关阅读:
    各种锁
    几百兆的sql文件无法编辑
    og4j1.x升级log4j2.x及异步日志开启
    TSNE/分析两个数据的分布
    _tkinter.TclError: no display name and no $DISPLAY environment variable
    split分割文件
    ubuntu+jdk
    进程操作
    ImportError: No module named apex
    Ubuntu 16.04.4安装Anaconda
  • 原文地址:https://www.cnblogs.com/lucio_yz/p/4477163.html
Copyright © 2020-2023  润新知