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