回溯算法

回溯算法就是一种有组织的系统最优化搜索技术,可以看作蛮力法穷举搜索的改进。回溯法常常可以避免搜索所有可能的解,所以它适用于求解组织数量较大的问题。
应用示例(N皇后问题):

N皇后问题是指在N*N的棋盘上放置N个皇后,使这N个皇后无法吃掉对方(也就是说两两不在一行,不在一列,也不在对角线上)。本例子求在给定棋盘大小的条件下,求N皇后存在的方案数。
在这里插入图片描述

Matlab代码:
global size; %棋盘大小
global num; %方案数量
global queen;
size=4;num=0;
queen = zeros(size,1);

Trace(1)
num=num/factorial(size) %考虑到数字排列方式可以有多种

function [t] = Trace(t)
global size; global num; global queen; 
for i=1:size*size
    if t==1
         queen(t)=i;
         Trace(t+1);
    end
    for j=1:t-1 
          if  floor((i-1)/size)==floor((queen(j)-1)/size)||...   %是否可以接着插入新的皇后
              (i-size*floor((i-1)/size))==(queen(j)-size*floor((queen(j)-1)/size))||...
              abs((queen(j)-size*floor((queen(j)-1)/size)-i+size*floor((i-1)/size))/(floor((queen(j)-1)/size)-floor((i-1)/size)))==1
               break      
          end
          if j==t-1
              queen(t)=i;% 插入新的皇后
              if t==size % 获得一组排列结果  
                  num=num+1;
              else
                   Trace(t+1); 
              end
          end
    end  
 end
end

参考资料:
1.https://blog.csdn.net/My_ben/article/details/82768047

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值