gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control systemdiff --git a/08. Trazenje puta/TopSpeed/Put.MOD b/08. Trazenje puta/TopSpeed/Put.MOD
--- /dev/null
@@ -0,0 +1,143 @@
+MODULE Put;\r
+\r
+ FROM IO IMPORT\r
+ WrLn, WrStr, RdCard, WrCard, OK;\r
+\r
+ FROM Storage IMPORT\r
+ ALLOCATE;\r
+\r
+ CONST\r
+ MaxBrGrad = 50;\r
+\r
+ TYPE\r
+ Lista = POINTER TO Grad;\r
+ Grad = RECORD\r
+ Info: CARDINAL;\r
+ Veza: Lista;\r
+ END;\r
+ Mreza = ARRAY [1 .. MaxBrGrad] OF Lista;\r
+ Posecen = ARRAY [1 .. MaxBrGrad] OF BOOLEAN;\r
+\r
+ VAR\r
+ m: Mreza;\r
+ BrojGr: CARDINAL;\r
+ GPoc, GKra: CARDINAL;\r
+\r
+ PROCEDURE Ubaci(VAR L: Lista; G: CARDINAL);\r
+ VAR\r
+ Tek, Novi: Lista;\r
+ BEGIN\r
+ IF (L = NIL) OR (G < L^.Info) THEN\r
+ NEW(Novi);\r
+ Novi^.Info:= G;\r
+ Novi^.Veza:= L;\r
+ L:= Novi;\r
+ ELSE\r
+ Tek:= L;\r
+ WHILE (Tek^.Veza # NIL) AND (Tek^.Veza^.Info < G) DO\r
+ Tek:= Tek^.Veza;\r
+ END;\r
+ IF (Tek^.Veza = NIL) OR (Tek^.Veza^.Info > G) THEN\r
+ NEW(Novi);\r
+ Novi^.Info:= G;\r
+ Novi^.Veza:= Tek^.Veza;\r
+ Tek^.Veza:= Novi;\r
+ END;\r
+ END;\r
+ END Ubaci;\r
+\r
+ PROCEDURE Povezi(G1, G2: CARDINAL);\r
+ BEGIN\r
+ Ubaci(m[G1], G2);\r
+ Ubaci(m[G2], G1);\r
+ END Povezi;\r
+\r
+ PROCEDURE Unos(VAR G1, G2: CARDINAL);\r
+ VAR\r
+ G: CARDINAL;\r
+ BEGIN\r
+ REPEAT\r
+ WrStr('Unesite broj gradova (od 2 do ');\r
+ WrCard(MaxBrGrad, 1);\r
+ WrStr(') ---- ');\r
+ BrojGr:= RdCard();\r
+ WrLn;\r
+ UNTIL OK AND (2 <= BrojGr) AND (BrojGr <= MaxBrGrad);\r
+ FOR G:= 1 TO BrojGr DO\r
+ m[G]:= NIL;\r
+ END;\r
+ REPEAT\r
+ WrStr('Unesite dva grada koji su povezani linijom.');\r
+ REPEAT\r
+ WrLn;\r
+ WrStr('Unesite red. br. prvog grada (ili 0 za kraj unosa linija) -- ');\r
+ G1:= RdCard()\r
+ UNTIL OK AND (G1 <= BrojGr);\r
+ IF G1 > 0 THEN\r
+ REPEAT\r
+ WrStr('Unesite red. br. drugog grada ------------------------------ ');\r
+ G2:= RdCard();\r
+ UNTIL OK AND (1 <= G2) AND (G2 <= BrojGr) AND (G1 # G2);\r
+ Povezi(G1, G2);\r
+ END;\r
+ WrLn;\r
+ UNTIL G1 = 0;\r
+ REPEAT\r
+ WrLn;\r
+ WrLn;\r
+ WrStr('Unesite red. br. pocetnog grada -- ');\r
+ G1:= RdCard();\r
+ UNTIL OK AND (1 <= G1) AND (G1 <= BrojGr);\r
+ REPEAT\r
+ WrLn;\r
+ WrStr('Unesite red. br ciljnog grada -- ');\r
+ G2:= RdCard();\r
+ UNTIL OK AND (1 <= G2) AND (G2 <= BrojGr) AND (G1 # G2);\r
+ END Unos;\r
+\r
+ PROCEDURE NadjiPut(Od, Do, brojGr : CARDINAL);\r
+ VAR\r
+ Pos: Posecen;\r
+ Reseno: BOOLEAN;\r
+ i: CARDINAL;\r
+ Resenje: ARRAY [1 .. MaxBrGrad] OF CARDINAL;\r
+\r
+ PROCEDURE Pokusaj(Od, Br: CARDINAL; VAR Reseno: BOOLEAN);\r
+ VAR\r
+ Pok: Lista;\r
+ BEGIN\r
+ Pos[Od]:= TRUE;\r
+ Resenje[Br]:= Od;\r
+ IF Od = Do THEN\r
+ Reseno:= TRUE;\r
+ WrLn;\r
+ WrStr('Put koji treba precji je sledeci:');\r
+ WrLn;\r
+ FOR i:= 1 TO Br DO\r
+ WrCard(Resenje[i], 4);\r
+ END;\r
+ ELSE\r
+ Pok:= m[Od];\r
+ WHILE (Pok # NIL) AND NOT Reseno DO\r
+ WHILE (Pok # NIL) AND Pos[Pok^.Info] DO\r
+ Pok:= Pok^.Veza;\r
+ END;\r
+ IF Pok # NIL THEN\r
+ Pokusaj(Pok^.Info, Br + 1, Reseno);\r
+ END;\r
+ END;\r
+ END;\r
+ END Pokusaj;\r
+\r
+ BEGIN\r
+ Reseno:= FALSE;\r
+ FOR i:= 1 TO BrojGr DO\r
+ Pos[i]:= FALSE;\r
+ END;\r
+ Pokusaj(Od, 1, Reseno);\r
+ END NadjiPut;\r
+\r
+BEGIN\r
+ Unos(GPoc, GKra);\r
+ NadjiPut(GPoc, GKra, BrojGr);\r
+END Put.\r