{ File: grafio.pas }

{ Scopo: procedure di lettura e scrittura di grafi da e su file di testo }

procedure LeggiGrafoDaFile (var grafo: TipoGrafo; nome_file: TipoNomeFile);
{ Legge da un file di testo un grafo non etichettato scritto sotto forma di
  matrice di adiacenza, con 1 per denotare la presenza di un arco e 0 per
  denotare la sua assenza. }
var
  i,j         : TipoNodo;
  val_matrice : integer;
  data_file   : Text;

begin
  { apri il file in lettura }
  assign(data_file, nome_file);
  reset(data_file);

  { legge la matrice di adiacenza da file }
  for i := 1 to NumNodi do
    for j := 1 to NumNodi do
    begin
      read(data_file, val_matrice);
      if val_matrice = 1 then
        InserArco(grafo, i, j)
      else
        ElimArco(grafo, i, j)
    end;

  { chiude il file }
  close(data_file)
end; { LeggiGrafoDaFile }


procedure ScriviGrafoSuFile (var grafo: TipoGrafo; nome_file: TipoNomeFile);
{ Scrive un grafo non etichettato su un file di testo in forma di matrice di
  adiacenza, con 1 per denotare la presenza di un arco e 0 per denotare la sua
  assenza. }
var
  i,j         : TipoNodo;
  val_matrice : integer;
  data_file   : Text;

begin
  { apri il file in scrittura }
  assign(data_file, nome_file);
  rewrite(data_file);

  { scrivi la matrice sul file }
  for i := 1 to NumNodi do
    begin
      for j := 1 to NumNodi do
        if TestEsisteArco(grafo, i, j) then
          write(data_file, 1, ' ')
        else
          write(data_file, 0, ' ');
      writeln(data_file)
    end;
  close(data_file)
end; { ScriviGrafoSuFile }


procedure StampaGrafo (var grafo: TipoGRafo);
{ Stampa un grafo sullo schermo. }
var
  i,j : TipoNodo;

begin
  { per tutti i nodi }
  for i := 1 to NumNodi do
    begin
      write(i:2, ': ');
      { visuallizza la lista dei nodi successori }
      for j := 1 to NumNodi do
        if TestEsisteArco(grafo, i, j) then
          write(' -> ',j);
      writeln
    end
end; { StampaGrafo }