資源簡介
啟發式搜索,可通過修改代價函數來構建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實現\
- 上一篇:tcopula函數的代碼
- 下一篇:matlab實現牛頓-拉夫遜法電力系統潮流計算
評論
共有 條評論