yol=[1,2,800,700;2,1,800,300;2,3,850,300;2,6,400,300;3,2,850,800;3,4,1270,800;3,7,900,800;4,3,1270,1000;4,5,1155,1000;5,4,1155,1100;5,10,1900,1100;6,2,400,350;6,7,1100,350;7,3,900,850;7,6,1100,850;7,8,1400,850;8,7,1400,900;8,9,950,900;9,8,950,800;9,10,1800,800;10,5,1900,1700;10,9,1800,1700]; %yol=[1,2,800,700;2,1,800,300;2,3,850,300;2,6,400,300;3,2,850,800;3,4,850,800;3,7,900,800;4,3,850,1270;4,5,1155,1000;5,4,1155,1100;5,10,1900,1100;6,2,400,300;6,7,1100,300;7,3,900,850;7,6,1100,850;7,8,1400,850;8,7,1400,900;8,9,950,900;9,8,950,800;9,10,1800,800;10,5,1900,1700;10,9,1800,1700]; xNodes=[73,127,314,477,534,685,555,496,331,140,127]; yNodes=[57,-126,-101,-125,32,-136,-249,-362,-302,-262,-126]; kisaXnodes=[]; kisaYnodes=[]; kucukdeger=0; closeDeger=1; node=0; kac =0; openListBoyut=[]; closeListBoyut=[]; openList=[;;;]; closeList=[;;]; kisaYol=[;]; closeList(1,1)=1; closeList(1,2)=0; closeList(1,3)=0; kontrolDeger=0; opendaVarmi=0; kisaYolAdim=0; while ( node ~= 10) for i=1:1:22 % close listteki son değer ile gelen yoldaki ile bağlantısı var mı ? if closeList(closeDeger,1) == yol(i,2) closeListBoyut=size(closeList); % eğer gelen değer closelistte var ise kontrol değeri artır for j=1:1:closeListBoyut(1) if yol(i,1) == closeList(j,1) kontrolDeger=kontrolDeger+1; end end % kontrol değer 0 ise openlist e ata if kontrolDeger == 0 kac = kac+1; openList(kac,1)= yol(i,1); openList(kac,2)= yol(i,2); openList(kac,3)= yol(i,3) + closeList(closeDeger,3) + yol(i,4); openList(kac,4)= yol(i,4); % OpenListte var olan bir değer geldi ise f(n) değeri büyük olanı listeden kaldır %sonradan ekledim openListBoyut=size(openList); for b=1:1:openListBoyut(1)-1 for c=b+1:1:openListBoyut(1) if openList(b,1) == openList(c,1) if openList(b,3) > openList(c,3) openList(b,3) = 150000; else openList(c,3) = 150000; end end end end %sonradan ekledim end % open liste atama işleminden sonra kontrol değeri sıfırla kontrolDeger=0; end end %openListBoyut=size(openList); %openListBoyut %if openListBoyut(1) > 1 % for m=1:1:openListBoyut(1) % for n=2:1:openListBoyut(1)-1 % if openList(m,1) == openList(n,1) % if openList(m,3) > openList(n,3) % openList(m,:)=[]; % else % openList(n,:)=[]; % end % end % end % end %end % OpenListte bulunan en küçük f(n) 'e sahip olanın listedeki konumunu bul. openListBoyut=size(openList); openListBoyut kucukdeger=0; if openListBoyut(1) > 1 for k=1:1:openListBoyut(1)-1 for t=2:1:openListBoyut(1) if openList(k,3)>openList(t,3) k=t; kucukdeger=t; end end end end if kucukdeger == 0 kucukdeger=1; end openList kucukdeger closeDeger=closeDeger+1; % opeliniste ki en küçük değeri closelist e aktar closeList(closeDeger,1)=openList(kucukdeger,1); closeList(closeDeger,2)=openList(kucukdeger,2); closeList(closeDeger,3)=openList(kucukdeger,3)-openList(kucukdeger,4); %openList %kucukdeger % eklenen değeri listeden temizle openList(kucukdeger,3)=150000; %openList %node=node+1; %eklenen değerin başlangıç değeri aranan node ise node değerini ona eşitle ve arama işlemini sonlandır if closeList(closeDeger,1)== 10 node=10; end closeList end % closelisteki değerlerden birbiri ile bağlantılı olanlara göre kisayol haritası çıkar for p=1:1:closeDeger if p==1 kisaYolAdim=kisaYolAdim+1; kisaYol(kisaYolAdim,1)=closeList(closeDeger,1); kisaYol(kisaYolAdim,2)=closeList(closeDeger,2); end size(kisaYol); if p < closeDeger if kisaYol(kisaYolAdim,2)== closeList(closeDeger-p+1,1) kisaYolAdim=kisaYolAdim+1; kisaYol(kisaYolAdim,1)=closeList(closeDeger-p+1,1); kisaYol(kisaYolAdim,2)=closeList(closeDeger-p+1,2); end end if p == closeDeger kisaYolAdim=kisaYolAdim+1; kisaYol(kisaYolAdim,1)=closeList(1,1); kisaYol(kisaYolAdim,2)=closeList(1,2); end end kisaYol kisaYolAdim % çıkan kısa yol haritasına göre bu nodeların değerlerini ata for f=1:1:kisaYolAdim if kisaYol(f,1)==6 kisaXnodes(f)= xNodes(10)+2; kisaYnodes(f)= yNodes(10)+20; elseif kisaYol(f,1)==7 kisaXnodes(f)= xNodes(9)+2; kisaYnodes(f)= yNodes(9)+20; elseif kisaYol(f,1)==9 kisaXnodes(f)= xNodes(7)+2; kisaYnodes(f)= yNodes(7)+20; elseif kisaYol(f,1)==10 kisaXnodes(f)= xNodes(6)+2; kisaYnodes(f)= yNodes(6)+20; else kisaXnodes(f)= xNodes(kisaYol(f,1))+2; kisaYnodes(f)= yNodes(kisaYol(f,1))+20; end end kisaXnodes kisaYnodes % normal haritanın ve kısa yolun çizim işlemini gerçekleştir plot(xNodes,yNodes); hold on scatter(xNodes,yNodes); hold on plot([314 331],[-101 -302]); hold on plot(kisaXnodes,kisaYnodes,'--rs','LineWidth',2); text(60,57,'A \rightarrow',... 'HorizontalAlignment','right') text(115,-126,'B \rightarrow',... 'HorizontalAlignment','right') text(314,-61,'C \downarrow',... 'HorizontalAlignment','center') text(477,-145,'D \uparrow',... 'HorizontalAlignment','center') text(534,70,'E \downarrow',... 'HorizontalAlignment','center') text(665,-136,'K \rightarrow',... 'HorizontalAlignment','right') text(555,-279,'J \uparrow',... 'HorizontalAlignment','center') text(496,-382,'H \uparrow',... 'HorizontalAlignment','center') text(331,-322,'G \uparrow',... 'HorizontalAlignment','center') text(140,-282,'F \uparrow',... 'HorizontalAlignment','center')