Advertisement
Guest User

graphs

a guest
Dec 4th, 2018
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module Main;
  2.  
  3. const NOWAY = -1;
  4. const UNSELECTED = 0;
  5. const SELECTED = 1;
  6.  
  7. type String = array * of integer;
  8. type Table = array * of String;
  9.  
  10. type {ref, public} Graph = record
  11.     siz: integer;
  12.     table: Table;
  13. end Graph;
  14.  
  15. procedure createGraph(table: Table; siz: integer): Graph;
  16. var g: Graph;
  17. begin
  18.     g := new Graph;
  19.     g.siz := siz;
  20.     g.table := table;
  21.  
  22.     return g;
  23. end createGraph;
  24.  
  25. procedure distRec(var graph: Graph; var uns: Table; cur: integer; e: integer; d: integer; var result: integer);
  26.     var i: integer;
  27.     var curDist: integer;
  28. begin
  29.     if cur = e then
  30.         if (result > d) or (result = NOWAY) then
  31.             result := d;
  32.         end;
  33.     else
  34.         for i := 0 to graph.siz-1 do
  35.             if uns[cur][i] = UNSELECTED then
  36.                 uns[cur][i] := SELECTED;
  37.                 curDist := graph.table[cur][i];            
  38.  
  39.                 if curDist # NOWAY then
  40.                     distRec(graph, uns, i, e, d+curDist, result);
  41.                 end;
  42.  
  43.                 uns[cur][i] := UNSELECTED;
  44.             end;
  45.         end;
  46.     end;
  47. end distRec;
  48.  
  49. procedure dist(var graph: Graph; b: integer; e: integer): integer;
  50.     var result: integer;
  51.     var uns: Table;
  52. begin
  53.     result := NOWAY;
  54.     uns := new Table(n, n);
  55.  
  56.     for i := 0 to n-1 do
  57.         for j := 0 to n-1 do
  58.             t[i][j] := UNSELECTED;
  59.         end;
  60.     end;
  61.  
  62.     distRec(graph, uns, b, e, 0, result);
  63.    
  64.     return result;
  65. end dist;
  66.  
  67. var n: integer;
  68. var curva: integer;
  69. var p1: integer;
  70. var p2: integer;
  71.  
  72. var i: integer;
  73. var j: integer;
  74.  
  75. var t: Table;
  76. var g: Graph;
  77.  
  78. begin
  79.     read(n);
  80.  
  81.     t := new Table(n, n);
  82.  
  83.     for i := 0 to n-1 do
  84.         for j := 0 to n-1 do
  85.             t[i][j] := NOWAY;
  86.         end;
  87.     end;
  88.  
  89.     read(curva);
  90.  
  91.     while curva # NOWAY do
  92.         read(p1);
  93.         read(p2);
  94.        
  95.         t[p1][p2] := curva;
  96.         t[p2][p1] := curva;
  97.  
  98.         read(curva);
  99.     end;
  100.  
  101.     g := createGraph(t, n);
  102.  
  103.     writeln("0->1 : [", dist(g, 0, 1), "]");
  104.     writeln("1->2 : [", dist(g, 1, 2), "]");   
  105.     writeln("2->0 : [", dist(g, 2, 0), "]");
  106.    
  107.     (*i := 0 to g.siz-1 do
  108.         for j := 0 to g.siz-1 do
  109.             write(dist(g, i, j));
  110.         end;
  111.         writeln(" ");
  112.     end;*)
  113.  
  114.     read(n);
  115. end Main.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement