Guest User

Untitled

a guest
Jan 24th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 5.93 KB | None | 0 0
  1. Program grafo ;
  2. var
  3.  matriz: array [1..10,1..10] of integer;
  4.  matriz2: array [1..10,1..10] of integer;
  5.  matrizaux: array[1..10,1..10] of integer;
  6.  matrizaux2: array[1..10,1..10] of integer;
  7.  i,j,n,d,e,k,f,g:integer;
  8.  nome: array [1..10] of string;
  9.  resp, resp2, resp3:char;
  10. Begin
  11.    writeln ('Favor entrar com o numero de rotulos dos vertices');
  12.    readln(n);
  13.    if n>10 then
  14.    begin
  15.      writeln ('Erro. O maximo de rotulos e 10 e o minimo e 2');
  16.    end  
  17.    else
  18.    begin
  19.    if n>1 then
  20.    begin
  21.        for i:=1 to n do
  22.        begin
  23.              writeln ('Entre com o rotulo ',i);
  24.              readln (nome [i]);
  25.       end;    
  26.        for i:=1 to n do
  27.        begin
  28.          for j:=1 to n do
  29.          begin
  30.          if i<j then
  31.              begin
  32.              if i<>j then
  33.              begin
  34.                writeln (nome[i],' conhece ',nome[j],'? (s,n)');
  35.                readln (resp);
  36.                if resp='s' then
  37.                begin
  38.                  matriz[i,j]:=1;
  39.                  matriz[j,i]:=1;
  40.                end
  41.                else
  42.                begin
  43.                  matriz[i,j]:=0;
  44.                  matriz[j,i]:=0;
  45.                end;
  46.              end
  47.             else
  48.             begin
  49.             matriz[i,j]:=0;
  50.             end;
  51.             end
  52.         else
  53.         begin
  54.            
  55.         end;
  56.         end;
  57.       end;        
  58.      writeln ('Deseja: (a,b,c) ver a matriz de adjacencias, calcular a menor distancia entre dois vertices ou calcular o diametro do grafo, respectivamente');
  59.      readln (resp2);
  60.      case resp2 of
  61.        'a':
  62.        begin
  63.          for i:=1 to n do
  64.          begin
  65.            for j:=1 to n do
  66.            begin
  67.              write (matriz[i,j],' ');        
  68.            end;
  69.            writeln;
  70.          end;
  71.       end;
  72.       'b':
  73.       begin
  74.         d:=0;
  75.         repeat
  76.           d:=d+1;
  77.           writeln('Seu primeiro vertice e ',nome[d],'? (s,n)');
  78.           readln (resp3);
  79.         until resp3='s';
  80.         e:=0;
  81.         repeat
  82.           e:=e+1;
  83.           writeln ('Seu segundo vertice e ',nome[e],'? (s,n)');
  84.           readln (resp3);
  85.         until resp3='s';
  86.         if matriz[d,e]=0 then
  87.          begin
  88.            if d<>e then
  89.           begin
  90.              for i:=1 to n do
  91.              begin
  92.                for j:=1 to n do
  93.                begin
  94.                  matrizaux[i,j]:=matriz[i,j]
  95.                end;
  96.              end;
  97.              f:=1;
  98.              repeat
  99.                f:=f+1;
  100.                matriz2[i,j]:=0;
  101.                  For i:= 1 to n do
  102.                  begin
  103.                    For j:=1 to n do
  104.                    begin
  105.                      For k:= 1 to n do
  106.                      begin
  107.                        matriz2[i,j]:= matriz2[i,j] + matrizaux[i,k] * matriz[k,j];
  108.                      end;
  109.                    end;
  110.                  end;
  111.                  for i:= 1 to n do
  112.                  begin
  113.                    for j:=1 to n do
  114.                    begin
  115.                      matrizaux[i,j]:=matriz2[i,j]
  116.                    end;
  117.                  end;
  118.             until matrizaux[d,e]>0;
  119.             writeln('A menor distancia (em saltos) do par de vertices escolhido e: ',f);
  120.            end
  121.            else
  122.            begin
  123.              f:=0;
  124.             writeln('A menor distancia (em saltos) do par de vertices escolhido e: ',f);
  125.            end;
  126.          end
  127.         else
  128.         begin
  129.           f:=1;
  130.           writeln('A menor distancia (em saltos) do par de vertices escolhido e: ',f);
  131.         end;
  132.        
  133.       end;
  134.       'c':
  135.       begin
  136.              for i:=1 to n do
  137.              begin
  138.                for j:=1 to n do
  139.                begin
  140.                  matrizaux[i,j]:=matriz[i,j];
  141.                  if matriz [i,j]=0 then
  142.                    g:=0
  143.                  else
  144.                  begin
  145.                  
  146.                  end;
  147.                end;
  148.              end;
  149.              for i:= 1 to n do
  150.                    begin
  151.                      for j:=1 to n do
  152.                      begin
  153.                          matrizaux2[i,j]:=matriz[i,j];
  154.                          if matrizaux2[i,j]=0 then
  155.                          begin
  156.                            g:=0;
  157.                          end
  158.                          else
  159.                          begin
  160.                          end;  
  161.                      end;
  162.                    end;
  163.              f:=1;
  164.              if g=0 then
  165.              begin
  166.                repeat
  167.                g:=1;
  168.                  f:=f+1;
  169.                  matriz2[i,j]:=0;
  170.                    For i:= 1 to n do
  171.                    begin
  172.                      For j:=1 to n do
  173.                      begin
  174.                        For k:= 1 to n do
  175.                        begin
  176.                          matriz2[i,j]:= matriz2[i,j] + matrizaux[i,k] * matriz[k,j];
  177.                        end;
  178.                      end;
  179.                    end;
  180.                    for i:= 1 to n do
  181.                    begin
  182.                      for j:=1 to n do
  183.                      begin
  184.                        matrizaux[i,j]:=matriz2[i,j]
  185.                      end;
  186.                    end;
  187.                    for i:= 1 to n do
  188.                    begin
  189.                      for j:=1 to n do
  190.                      begin
  191.                        if matriz2[i,j]>=matrizaux2[i,j] then
  192.                        begin
  193.                          matrizaux2[i,j]:=matriz2[i,j];
  194.                          if matrizaux2[i,j]=0 then
  195.                          begin
  196.                            g:=0;
  197.                          end
  198.                          else
  199.                          begin
  200.                          end;
  201.                        end
  202.                    else
  203.                    begin
  204.                    end;  
  205.                      end;
  206.                    end;
  207.               until g=1;
  208.             end
  209.             else
  210.             begin
  211.            
  212.             end;
  213.            writeln ('O diametro do grafo e: ',f);  
  214.       end;
  215.     end;    
  216.    end
  217.    else
  218.    begin
  219.      writeln ('Erro. O maximo de rotulos e 10 e o minimo e 2');
  220.    end;
  221.   end;
  222. End.
Add Comment
Please, Sign In to add comment