From 7264e199e64f27013dc0c624b7baa730643334eb Mon Sep 17 00:00:00 2001 From: clupus <154858@sch.bme.hu> Date: Mon, 11 Oct 2021 14:41:01 +0200 Subject: [PATCH] Vegre keszvan 12 pontra ez a fos --- GG2DP5_hf01.zip | Bin 1394 -> 1447 bytes input | 7 +++- mi_GG2DP5_hf1.py | 104 +++++++++++++++++++++-------------------------- 3 files changed, 52 insertions(+), 59 deletions(-) diff --git a/GG2DP5_hf01.zip b/GG2DP5_hf01.zip index 5b981f93a2355bc9cb5851aa9de40ca109ba35a1..1b50ddb4af035f113c67658fe6ee379c74d25a70 100644 GIT binary patch delta 1398 zcmeywwVb;?z?+#xgn@y9gW+efcks>Ex_dveFfdpMFfa%($S~w)#=E;4xdfQTXQUbG z6;y_Xa56A&)k{g-rk9dfTEWf0$nt`jfdNdc4foD}Y$mYpceu~o!>2lxZs>7|I2PX$ zJGf{%E0>6FjI%`Kl%o-gLMDB>rT6Q;waC{6DaQ-zw?92NaYbdF@gIwwyLT7*zGHZh zzRWMic&%hjh)!$#Pd{-Xxra|ve?ETx{(z45&N=$x2b1K^>~A+0_q_L}_R!}|6Qr&L zZtb^xRg&a;z&p%k#z8sN;~L3aQfp;S7X){-<Uf=Qd)=v{b=E1iMf!|c*=n5~7gRz{ z%;3JV<h6&JPknu&Ps`Q`zmM8UX@|Ob70xi+cr{bm=%(??pK95?rh#>50#@4X=&fYc zJ~dB`ZPE-?fwq_e*|vE}k&l`W%=uaH;i1R*p8U%zRxFtnS-H6<B4Npi=|7GC6fC%V zxZt%%^zn&R={F=^#<e*ahD#ki_QUW7dyI<mpUGZ1Ci*V37kR2bt6y)uRJH1bvx}xk zl;9$<3u@f+DsH5F;JNtbWEuOPEw=-UH}){BDr?w~JV`UlPJ??P_g&WVxK@VKlR9Ut z*=Bg&D)VHCs_WmV|0++KnZ+CUxNLVFOIoFw`dD>KY~tP-ExWAN|JYUT_|qhd|3W*1 zJ<pNf7v{}TzIcFn=1+-*3zlrI=PBB@cCxt4irP;~dLrtvd=*VfRjJmoPa6!guGl@P zId7!kpR?T0N9bILUT8{7LgkfAMYRWOx)lR=`Q72?<(TXl8_?aDq+!1DdPqS)=<UzC z+t{1ex@=6ncSqg%-UFU<f0kZ8Rlbz-`s_NPshroh^o0pM{5Q??E%$}1SAM;XOsL-) zVf}7aRN>{a<`rS>8*iAdc*g8GO|xuwUipNWhm5mw_4%XMwy*IoTkxzQ>VH&9<@4L^ zE$MG&{xAu!N(-_w+rQ+?$t@eqZPtF^RkdbHi>Y+Ia^}&(MgFlhHRlZalip0Icr{N? zCTO`N+qAIHU$^ocTd_Sm<NB4FoT+^2(OrQ}^|JN7p??a`+vr?Nu6tcm*Cjc3(Uh0Z z93E%$<W#q`q?XLzbf$gFg7DH+PqMdW-!pj5vdr@D67N0JKmC<E7|qrY<t-Ol@+Q5F zSxJrM_Tq|^lB{DQPFuR$+=`Qed?y`wUn$EfeCC&DWy_Pq>LvYeN|uVAUi9VJVy)PW zitUe=?VnSB!un|13wGl>8n;XneUF!&DLV1<j`db9ul#ElF1XtD&3fd!=Hz{c$NNr* z<Z(ux;oeoC$+hTQu43Ta1#Naqr>OfKc0Ks8_u8uZGp$_{KlNy^wM+Wi_g-6L=~VvV z_u4w^)yI!%U3&Y6Be1|EGb(w$dsW$erPSGBe>Jz3@30pLmal)`o926&=dr;=SHH(D zk(r0D9R7W-=<#;H-LtPqJ<MDG{M@t-pKUD{lI}gT4%_|Y*un=tf5}eQSSlIC6q+_i z>IJ`T>5j~TXLlxethSp{8e{IMe=R@tqaR!M|0xG=9{8Cj_C8DJnAEJNs;(E#Oq2Vb zn6l@7#1`ph$%3an#&^$N-c@gU?Z0i->HiDg9j^Ry>{EQW)!}nHGuq3ppKJIb8YcEW z`lZkce*;#3hONfA)>$`WnX;_*vh3Ko^*sBdnas7eA20a++qdNLyT-gS-M#$vXXiJi ze)`_ta7XBSj6uS&$&!W>SH`Em{L}ZtYWFsI9sg)<-Z0Cei%KQOY9{X!zqRpdW85b8 z8+%!Q9jkq8l<|a(r#SY@8;Sc#l{fZWH(fU4>5K;@J2KspR~>I?^sPPfZ>i>l+4YWR y>yr~R*dAv}NEI9|$hx@I<3DqNHzSiAGnQg>vOKF6sJxu)!>Yh$&C0;QzyJXEouQ@x delta 1345 zcmZ3^{fVnSz?+#xgn@y9gTZHkS8&$F)K`007#L0nFfa%($S~w)#=E;4xdfQTXQUbG z6;y_Xa56Bj*Gf+G*Gx_<t>9*0WO>2NzyKz$hWoC6WhQX<v-Yz?k682cm{xgRy}Wq# zwq4z;u11Hh)#zeN>c|(GeT$EO#jpF;eZrF_e7JbKK5rJQQd(Ngvok*`BzWX%s+bvm zOnfP9enx`rex}$#eH*i&gWP-eo!j^SkLiu$k>}JlzpSv5^xxOGnm^KRPj&u*%X356 zz65^nTCX{4#q*>C*-GIv4#<ff4?ScelBfBuX{(6zzE(?}X|}4yhnbX{P1UluZ<!n; zVKhnW2@~(nYdZDeXKE6CSat^f75{$K?W9l<S943}+D@*?aVNGqZqz%|Vlr#dm1dK| ze4~wKF<nCCC(HysZI6&{mHV|ps_sqXsUOFjXPke#d$B-WNAfBL?-@psJRF9>KEbUC z>a7!(g-^QcW_9dtU*`qwg?eG9AKr{HoUA!<|1){%TP@7u3j%Ux)|-E9TvQP&!&^He zvV?hoU*HT5zZJW9;+K42RN86FG%qKphbMSj?~gbs=OqEEN$dP)c!|5rPg&)!Go?_) zKOsP}a?%7z6T5^{2cON|psRRWYv*&t=(R7Zk7x;X?9)@>-nZp<vSZOti+L+zrtLmp zxoc~7;Gc6Y;(sc=u9zhWPg1J?V|-vI(~cJZtGBO4oG$*VyhY@uOQ(}q+m&Z(+?{rd zQuSFk`r8Pt4w6>VId~*!YWbO{;KeHWJ%1Rd9%8flZNt#K!csl(^ukk9RKq3J|NrNI zKJ8<@*9G3HH!sWlW-W|zj}yErx5@eMgwXUg0c#f8uU6b?F=gsC-DT4oG|TgT=GD7I z%j7)`eRVkHhCyOy+V{C@%=&lUFsYTcikS5&YUVx{o5XEiafeGd{EKJAB>3)pkU5Rb zbfs>2?v1rel{{4}RVwfA`ZVF?`JfHUW*T%|Q$IUz=Yk!*YnmM%{fc?lR(MauKkt2v zQvIo`eMfv1=Uxi>z&Lqr$eksUbEA$v@|pWXuHIAU<(B0u4tOe^+{>@XeDFc<5(D9l zqW%$vg%fWiZ?N0?W6e5=T-B{tBri?e>tm94k<;&aT)NZz=LUPTE(RWa&9VOd<;eTq z|EGyO`LHjybZYIa+*J`;-_N|hk#?hyr^|Zx;amG{YJ6L*<}WC9TJ#`v<Lr!6@x_9f z-6^?YFLu8AThCQ!c}wBy#k1_+@=9}CZf(2QC%t5zv+s8;W1Y?$n&tLBonE)DXY+b; z%bfN4(S9>@b?Diyo`R*eT|b@lj=o~3tJZfAe^4QuboAp#wG*>q89!$v%IThAdj6c7 zBkwM+mtW-<`BN3`7aPC)v#=5~4dOYRusB7kVB_hYtH0KDzFJ)$B`;UBWar1qwL;%F z=LPAp%P*Up*!y5t^mVhX)=8W8Y*y`M-BKm-I`&ZS_5XLjWWT-j;;EI&r$rZ7*R`)% zemXny&dG#d>y0wL9=xmbu4<3<<eT*Y-Om_4C3xmphyJ|br^e0{`ma`_U2MD8gI|Bw zsl4sI`R{$;ezVUPpJ>jX`YxjW+P1~jttHofe|Y}namBWuuMf}Iw$%8BV8fPrizULD zmaBP}O?N)?`_V3`H&ay4xN7Y1n%F&Q;WVZ%TK`TnZg5L=-5@L{zBfxu-poYh?92WS z5wj;~UfqyAXUpwnYs>0XiZ&<aRev$`ENuS!>`{ivt6*Cxuawux*R3CY{lV7ckZ?+~ w>44vczX}_kusPn}_<F`a=>Ts=COKv-CF0}|RxMD`H@T5jfsKuofq{Vm06JTOiU0rr diff --git a/input b/input index c704a04..a7674cd 100644 --- a/input +++ b/input @@ -14,4 +14,9 @@ point_coordinates route_between_points 1 0 1 2 -0 2 \ No newline at end of file +0 2 + +input3 rossz 2db, majd jo kimenete: +380.42 84.85 118.79 67.88 106.07 +380.42 465.28 543.06 272.94 364.87 +316.85 368.61 442.56 237.84 325.31 \ No newline at end of file diff --git a/mi_GG2DP5_hf1.py b/mi_GG2DP5_hf1.py index 18a7ae8..c68f11b 100644 --- a/mi_GG2DP5_hf1.py +++ b/mi_GG2DP5_hf1.py @@ -1,9 +1,8 @@ ######################################### # Keszitette Cseh Viktor - GG2DP5 # -# 2021.10.08 # +# 2021.10.11 # ######################################### -#import sys import math ##### Global variables ##### @@ -15,73 +14,63 @@ route_between_points = [] route = [] calculated_lengths = [] -distance = [] -notseenpoints = [] +verticles = [] -##### Global functions ##### -def dijkstra(a, b): - if(a == b): # Ekkor elertuk a keresett pontot - calculated_lengths.append(distance[b]) - return - - for i in range(0, len(route_between_points), 2): # iteralni a route_between_points-on, hogy az == e a meghivottal es kiszamolni a szomszedokhoz tartozo utat, ami esetleg legrovidebb lehet - if(route_between_points[i] == a): - length = calc_route_length(route_between_points[i], route_between_points[i+1]) +##### Classes ##### - if(length + distance[a] < distance[route_between_points[i+1]]): # ha kisebb az eddig tudott utvonalnal a most talalt, akkor cserelje ki arra - distance[route_between_points[i+1]] = length + distance[a] +## Ebben fogjuk majd tarolni a graf pontjaihoz tartozo adatokat +class vertice: + def __init__(self, name, x, y, neighbours): + self.name = name + self.x = x + self.y = y + self.neighbours = neighbours + self.distance = math.inf - elif(route_between_points[i+1] == a): - length = calc_route_length(route_between_points[i], route_between_points[i+1]) +##### Global functions ##### - if(length + distance[a] < distance[route_between_points[i]]): - distance[route_between_points[i]] = length + distance[a] +## Neve megteveszto, mert ez nem az egesz dijkstra algoritmus, csak a szomszedokat kiszamolo resze. +## Amikor az egesz algoritmus itt volt, akkor a csodalatos hf.mit.bme.hu ellenorzo rendszer panaszkodott, +## hogy tul nagy a rekurzio melysege, igy fail-elt a leadas..... +def dijkstra(a, b, notseenpoints): + if(a.name == b): + calculated_lengths.append(a.distance) + return + + for i in a.neighbours: + lenght = calc_route_length(a, verticles[i]) + if(lenght + a.distance < verticles[i].distance): + verticles[i].distance = a.distance + lenght +## Ez lenne a dijkstra masodik resze, ami az elozo vegere ment volna kb def route_search(): + notseenpoints = [] + + # minden kiszamolando ut, minden kovetkezo legkisebb eleresi utu pontjara meghivja a szomszedok tavolsaganak a kiszamolasat for x in range(0,len(route_to_calc),2): for i in range(map_config[1]): if(i == route_to_calc[x]): - distance.append(0) + verticles[i].distance = 0 else: - distance.append(math.inf) - notseenpoints.append(i) + verticles[i].distance = math.inf + notseenpoints.append(verticles[i]) while(len(notseenpoints) != 0): - minimum_distance = math.inf - corresponding_point = None - cntr = 0 - - for i in range(len(notseenpoints)): - if(distance[notseenpoints[i]] != None): #Meghivni ra a dijkstra algoritmust rekurzivan, ha mar szamoltuk, de ne jartunk meg benne - if(distance[notseenpoints[i]] < minimum_distance): # Es legkisebb a tavolsaga eddig - cntr += 1 - minimum_distance = distance[notseenpoints[i]] - corresponding_point = notseenpoints[i] - - if(cntr > 0): - notseenpoints.remove(corresponding_point) - dijkstra(corresponding_point, route_to_calc[x+1]) - - distance.clear() + notseenpoints = sorted(notseenpoints, key=lambda verticle: verticle.distance) + + dijkstra(notseenpoints[0], route_to_calc[x+1], notseenpoints) notseenpoints.clear() + def calc_route_length(a, b): - # X koordinata lekerese es szamolasa a pitagorasz tetelhez - x1 = int(point_coordinates[a*2]) - - x2 = int(point_coordinates[b*2]) - - x = abs(x1 - x2) - - # Y koordinata lekerese es szamolasa a pitagorasz tetelhez - - - y1 = int(point_coordinates[a*2+1]) - - y2 = int(point_coordinates[b*2+1]) + # X tavolsag szamolasa pitagorasz tetelhez + + x = abs(int(a.x) - int(b.x)) - y = abs(y1 - y2) + # Y tavolsag szamolasa pitagorasz tetelhez + + y = abs(a.y - b.y) # Pitagorasz tetel @@ -111,6 +100,8 @@ def read_from_input(): point_coordinates.append(int(arr[0], 10)) point_coordinates.append(int(arr[1], 10)) + temp = vertice(i, int(arr[0], 10), int(arr[1], 10), neighbours = []) + verticles.append(temp) x = input() @@ -120,6 +111,8 @@ def read_from_input(): route_between_points.append(int(arr[0], 10)) route_between_points.append(int(arr[1], 10)) + verticles[int(arr[0], 10)].neighbours.append(int(arr[1], 10)) + verticles[int(arr[1], 10)].neighbours.append(int(arr[0], 10)) def output_lengths(): output = "" @@ -135,12 +128,7 @@ def main(): read_from_input() route_search() output_lengths() - #print(map_config, file=sys.stderr) - #print(route_to_calc, file=sys.stderr) - #print(point_coordinates, file=sys.stderr) - #print(route_between_points, file=sys.stderr) - #print("almafa") - #print("***" + map_config[0] + "***", file=sys.stderr) + if __name__ == "__main__": main() \ No newline at end of file -- GitLab