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