资源简介

启发式搜索,可通过修改代价函数来构建A*等不同的算法;包含基本功能

资源截图

代码片段和文件信息

function []=bashuma
global e;  %open表计数
global i;  %close表计数
global m;  %循环次数计数
a=0;b=0;n=0;i=0;
e=1;m=0;

%初始化
dis=[1 2 3;8 0 4;7 6 5]; %目标节点
f.prev=zeros(3);
f.con=[2 8 3;1 0 4;7 6 5]; %初始节点
f.num=1;
f.fuc=valuefuc(fdis);
y=dis;
open(1)=f; %初始化Open表
k=f;

while a==0
 m=m+1;
 
 %设置循环次数
   if m>=10000
      disp(‘error!!‘);
     break;
   end
   
%  寻找代价最小值
 for j=1:e
     if k.fuc>open(j).fuc
         k=open(j);
     end
 end
 
 %%添CLOSE表
 i=i+1;
 j=k.num;
 close(i)=k;
 close(i).num=i;

 %%删OPEN表
 open(j).con=zeros(3);
 open(j).fuc=inf;
 
 %%是否找到目的节点
 a=getit(closedis);
 if a==1
   disp(‘success!!‘);
   break;
 end
 
 %%扩展节点
 open=opera(openclosekdis);
 k.fuc=inf; 
end
%输出路径
while 1
    for j=1:i
        if y==zeros(3)
           b=1;
           break;
        end
        if close(j).con==y
           t=close(j).num;
           n=n+1;
           show(n)=t;
           y=close(j).prev;
        end
    end
    if b==1
        break;
    end
end
for j=1:n
    close(show(n+1-j)).con
end

end

%查询是否找到目标节点
function a=getit(closedis)
global i;
 for j=1:i
     if close(j).con==dis
         a=1;
         break;
     else
         a=0;
     end
 end
end

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1326  2014-06-08 20:46  八数码问题MATLAB实现\bashuma.m
     文件        2466  2014-06-08 20:46  八数码问题MATLAB实现\opera.m
     文件         260  2014-06-08 20:47  八数码问题MATLAB实现\search.m
     文件         700  2014-06-08 20:42  八数码问题MATLAB实现\valuefuc.m
     目录           0  2014-06-08 20:42  八数码问题MATLAB实现\

评论

共有 条评论