Phát bi吋u c挨 b違n c栄a bài toán nh逢 sau: Cho tr逢噂c 8欝 th鵜 G và 2 nút
startNode và endNode thu瓜c G. Tìm 8逢運ng 8i ng逸n nh医t trong G n嘘i
startNode và endNode.
10.1.2 Gi違i quy院t bài toán:
O瓜t yêu c亥u phát sinh là có tr逢運ng h嬰p hai 8k吋m startNode ho員c endNode trên m衣ng l逢噂i giao thông không ph違i là các Node trong c挨 s荏 d英 li羽u.Khi 8ó chúng ta s胤 s穎 d映ng nh逢 Node 違o, khi 8ó các Node 違o này nh逢 các Node trong c挨 s荏 d英 li羽u nh逢ng khi ch逢挨ng trình 8逢嬰c t逸t 8i thì các Node 違o này không còn n英a. V噂i ph逢挨ng pháp Node 違o này chúng ta d宇 dàng qu違n lý các
x鵜 trí trên các c衣nh v噂i s嘘 l逢嬰ng c詠c l噂n và v磯n b違o 8違m tính liên thông gi英a nút th壱t vào 違o.
Bài toán này có nhi隠u cách gi違i quy院t khác nhau. Trong lu壱n v<n
này,ph逢挨ng pháp 8逢嬰c ch丑n 8吋 gi違i quy院t là dùng thu壱t gi違i (heuristic) A*. Thu壱t gi違i c映 th吋 nh逢 sau:
1. N院u startNode b茨ng endNode, không c亥n gi違i quy院t bài toán n英a.
2. Kh荏i t衣o 2 t壱p h嬰p r厩ng, m瓜t là t壱p openedNode, hai là t壱p closedNode.
Kh荏i t衣o bi院n PathhPound=false. Kh荏i t衣o bi院n s嘘 th詠c
3. 永ng v噂i m厩i node trong G, kh荏i t衣o bi院n distance b茨ng vô c詠c và bi院n
prevNode b茨ng null (Riêng v噂i startNode kh荏i t衣o distance b茨ng 0 và
prevNode b茨ng chính startNode).
4. Thêm node startNode vào t壱p openedNode.
5. V噂i m厩i node trong t壱p openedNode, tính (f(node)=g(node) + h(node))*
6. Gán cho node có f(node) nh臼 nh医t là bestNode.
7. N院u không tìm 8逢嬰c bestNode, thu壱t toán k院t thúc, không tìm 8逢嬰c l運i gi違i.
8. N院u tìm 8逢嬰c, lo衣i bestNode ra kh臼i t壱p openedNode.
9. N院u bestNode b茨ng chính endNode, làm r厩ng t壱p openedNode.Gán
PathFound=true.
10. N院u không, th詠c hi羽n vi羽c tìm các node xung quanh bestNode 8吋 thêm vào openedNode.(**) 11. N院u t壱p openedNode khác r厩ng, tr荏 l衣i b逢噂c 5. 12. N院u t壱p openedNode r厩ng P院u PathFound=true Bài toán 8ã tìm 8逢嬰c l運i gi違i. P院u PathFound=false
Bài toán không có l運i gi違i.
13.End
(*) c映 th吋 nh逢 sau:
f(node)=AlgorithmHeuristicBalance*distance(node) + (1 – AlgorithmHeuristicBalance) * d(node,endNode).
V噂i:
d(node1,node2)=sqrt(sqr(node1.x-node2.x)+sqr(node1.y-node2.y)) (**) c映 th吋 nh逢 sau:
1.Tìm các node aroundNode xung quanh (n嘘i tr詠c ti院p) v噂i node N c亥n xét.
2.V噂i m厩i aroundNode:
Tính l衣i giá tr鵜 distance và prevNode c栄a nó:
Distance(aroundNode)=diatance(aroundNode) + kho違ng cách th壱t t瑛 N
8院n aroundNode.
prevNode(aroundNode)=N.
P院u ((aroundNode 8ã xu医t hi羽n trong openedNode(closedNode) và
distance c栄a aroundNode này bé h挨n distance c栄a node t逢挨ng 泳ng trong
v壱p openedNode(closedNode)) ho員c (aroundNode ch逢a xu医t hi羽n trong
openedNode(closedNode))) thì:
Lo衣i node t逢挨ng 泳ng 8ó ra kh臼i t壱p openedNode ho員c closedNode. Thêm aroundNode vào openedNode.
N院u không,tr荏 l衣i b逢噂c 2.