You are on page 1of 7

TNG TM CC TRM XE BUT

Ta s t chc cc trm xe but thnh cc n v c lp vi nhau c id phn bit v cng 1 trm xe but s c nhiu tuyn xe but i qua c t chc nh sau : <BusStop id = 001> <Address>458 Nguyen Huu Tho Q.7</Address > <Coordinate>10.302837,106.274675</Coordinate> <BelongTo>86,37</BelongTo> <Area>7</Area> </BusStop> . Trong Area cho bit trm ny t khu vc no (VD : 7 -> qun 7). Khi ta s gim thiu c phm vi tm kim. iu kin h tr : c google h tr cc cng vic nh : + Tnh khong cc gia 2 vi tr trn google map qua method locationA.distanceTo(locationB). + Thng qua vic tm ng i ngn nht gia 2 v tr trn google map. Google h tr ta to ra cc im trung gian trn on ng i gia 2 vi tr (trong file kml tr v ca google c danh sch cc im trung gian).

File kml c danh sch cc im trung gian tng : S dng google render cc im (l cc trm xe but ) m ta mun th hin trn bn t ta th hin c con ng i ca xe but . Bi ton : Ta c bi ton cn tm ng i t v tr A -> B bng cch s dng cc tuyn ng i xe but. Sao cho khong cch i l ngn nht . (Ta khng a ra phm vi bi ton sao cho t thi gian nht v dng bi ton ny phc tp hn v n ph thuc nhiu vo cc iu kin ngoi cnh nh : kt xe, ti x chy nhanh chm, chng ngi vt trn ng ) t vn : Gi s ta c 2 v tr : U l v tr ngi dng hin ti . D l v tr ch ngi dng cn ti . t R1 l bn kinh m ngi dng mun tm kim xung quanh U. t R2 l bn kinh m ngi dng mun tm kim xung quanh D.

Gii thut :

- Tm tp hp cc trm xe but U sao cho busStop.distanceTo(U) < R1. - Lc tp hp ly danh sch xe but i qua cc trm ny t l tp S1. - Tm tp hp cc trm xe but D sao cho busStop.distanceTo(D) < R2. - Lc tp hp ly danh sch xe but i qua cc trm ny t l tp S2. - S l danh sch lu kt qu mi ln thc hin vic tm kim . M gi: o If (getIntersect(S, S1, S2)) // Tp S l danh sch cc trm m tuyn n l phn giao cc tuyn trong tp S1 v S2 thuc 1 tuyn xe but no . C th c nhiu tuyn tha ta ch chn ra 1 tuyn ti u nht render(S, U, D); o Else // i t 2 tuyn tr ln { Ly tng trm xe but t quanh U trongtp S1 L = getAListViaBusId(t.id) If (findBusStop(L)) { // danh sch cc kt qu AllList.add(S); S.clear(); } Else { Xut khng tm c tha mn yu cu xut tng bn knh d tm } Lp cho n khi ht trm If (AllList!= null) Tm tuyn c ng i nh nht : minList = List.min(); render(minList, U, D); }

Xy dng phng thc to danh sch xe but tha iu kin bi S dng thut gii quay lui v nh gia tt ca mi tuyn Hueristic quyt nh xem c nhy trm (jump) hay khng . M gi: Boolean finBusStop(ListBusStop L) { If(L.currentPos().distanceTo(D) <R2) { S.add(L.currentPost()) Return true } Else { boolean continue = false // jump[0] : BusId ; Jump[1] : BusStopId needToJump(L,jump) // Heuristic quyt nh If(jump[0] < 0) // Khng cn thit phi nhy trm v hin thi ta c tuyn tt nht ngha l tuyn ny c mt ch D { S.add(L.currentPos()) L.next() } Else // Nhy trm y do hm Heuristic quyt nh nhy sang trm c Id Thuc tuyn xe khc { if(!empty(jump)) { New L L.getAListViaBusId(jump[0]) L = L L.moveto(jump[1]) S.add(L.currentPos()) L.next() jump.clear() } } continue = findBusStop(L) } If(!continue) S.remove() // remove ti ui danh sch return continue }

Hueristic Cho php nhy sang trm khc vi iu kin l ti trm hin thi tm thy tuyn m ti D c i qua nu khng n s chn cc trm khc m c khong cch ti D ngn hn Void needToJump(ListBusStop L, int[] jump) { // kim tra xem path ny trm cui c th ti ch D khng If(isAGoodPath(L.moveLast())) return -1; // ly danh sch cc trm gn trm hin thi E = getBusStopNearBy(L.currentPos()) // ly phn giao E , S2 tr v Id tuyn . jump[0] = getIntersect(P, E, S2) jump[1] = P[0] // to 1 danh sch cc tuyn xe but m c cha cc trm E W = GetMultiListViaBusId(E) For(int i = 0; i<W.size; i++) { If(W[i].moveLast().distanceTo(D) < W[i+1].moveLast().distanceTo(D)) //ly Id xe but c jump[0] = W[i].getBusId() jump[1] = W[i].BusStop.getBusStopIdBelongTo(W[i].getBusId) } // ta chn trm cui trong W sao cho khong cch t n ti D ngn hn trm hin ti ( ta hy vng rng trm ny s dn ta ti D nhanh hn ). Nu khng dn ti th ta c th quay lui }

Xy dng phng thc to danh sch xe but tha iu kin bi findBusStop(BusStop t, boolean jump) { // nu t l trm tha iu kin th dng If (t.distanceTo(D) < R2) { S.add(t); return true; } else { boolean continue = false; If (jump) // nu c nhy trm do trm k t xa hn so vi t Tm t l trm gn t nhng khc tuyn vi t sao cho :

else

t.distanceTo(D) < t.distanceTo(D) ; t = t; jump = false; // nu cha nhy trm Tm t l trm gn t v cng tuyn vi t t = t ;

S.add(t); continue = findBusStop(t, jump) if(!continue) jump = true; S.remove(); } return continue; }

You might also like