zoukankan      html  css  js  c++  java
  • 八皇后问题-回溯法(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
  • 相关阅读:
    解决jar包冲突
    postman使用记录
    get请求直接通过浏览器发请求传数组或者list到后台
    excel中ppmt/pmt/ipmt的计算方式
    unicode编码与解码
    spring参数拼装
    java内存模型(jmm)
    Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)
    星空雅梦
    星空雅梦
  • 原文地址:https://www.cnblogs.com/lucio_yz/p/4477163.html
Copyright © 2011-2022 走看看