Pascal/Turbo Pascal - ayuda con el recorrido o camino de un grafo utlizando el algoritmo fleury urgente

 
Vista:

ayuda con el recorrido o camino de un grafo utlizando el algoritmo fleury urgente

Publicado por mari (1 intervención) el 23/07/2015 04:43:28
se necita recorrer un grafo X (CUALQUIERA)
*utilizando una lista enlazada simple
*utilizando el algoritmo fleury
*diseñado en lenguaje C O PASCAL
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

ayuda con el recorrido o camino de un grafo utlizando el algoritmo fleury urgente

Publicado por ramon (2158 intervenciones) el 07/08/2015 19:19:51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
{A ver si esto te ayuda}
 
program camino_fleury ;
uses
   crt;
 
type
 
   fichas = record
        fn1, fn2 : integer;
        end;
 
  var
    l, y, x, k : longint;
    ma : array[0..6] of longint;
    fih : array[1..100] of fichas;
    vistas : array[0..6] of boolean;
    mesa : array[0..6,0..6] of longint;
 
 
 
   function esimpar(var t : longint) : longint;
   var
      r, w : longint;
    begin
       fillchar(ma,sizeof(ma),0);
     for r := 1 to x do
     begin
         inc(ma[fih[r].fn1]);
         inc(ma[fih[r].fn2]);
     end;
        w := 0;
        k := fih[1].fn1;
        for r := 0 to 6 do
         if (odd(ma[r])) then
          begin
             inc(w);
              k := r;
          end;
         esimpar := w;
      end;
 
  procedure sevisita(m : longint);
  var
    r : longint;
    begin
       vistas[m] := true;
       for r := 0 to 6 do
        if (mesa[m,r] or mesa[r,m] <> 0) and
                            (not vistas[r]) then
         sevisita(r);
    end;
 
  function esconexa(q : longint) : boolean;
  var
    r : longint;
    w : boolean;
   begin
       w := true;
       fillchar(vistas,sizeof(vistas),false);
       sevisita(q);
       for r := 0 to 6 do
       if (ma[r] <> 0) and (not vistas[r]) then
        w := false;
        esconexa := w;
   end;
 
 
   function espuente(fih : fichas) : boolean;
   var
     j : boolean;
    begin
       dec(mesa[fih.fn1,fih.fn2]);
       dec(ma[fih.fn1]);
       dec(ma[fih.fn2]);
       j := not esconexa(fih.fn1 + fih.fn2 - k);
       inc(mesa[fih.fn1,fih.fn2]);
       inc(ma[fih.fn1]);
       inc(ma[fih.fn2]);
       espuente := j;
    end;
 
  procedure caminoeuleriano;
  var
    z, d : longint;
    es : array[1..100] of boolean;
   begin
       fillchar(es,sizeof(es),false);
     for z := 1 to x do
      for d := 1 to x do
      if (not es[d]) and ((fih[d].fn1 = k) or
         (fih[d].fn2 = k)) and (not espuente(fih[d])) then
         begin
            es[d] := true;
            dec(mesa[fih[d].fn1,fih[d].fn2]);
            dec(ma[fih[d].fn1]);
            dec(ma[fih[d].fn2]);
      if fih[d].fn1 = k then
       writeln(output,d,' +')
     else
       writeln(output,d,' -');
      k := (fih[d].fn1 + fih[d].fn2) - k;
      break;
     end;
   end;
 
  begin
     write('   Entre Tama¤o Del Array : ');
     readln(x);
     fillchar(mesa,sizeof(mesa),0);
     for y := 1 to x do
     begin
        write('  Entre Valor Del 1 = ',y,' : ');
        readln(fih[y].fn1);
        write('  Entre Valor Del 2 = ',y,' : ');
        readln(fih[y].fn2);
     end;
    clrscr;
    for l := 1 to x do
    writeln('  ',fih[l].fn1,'  ',fih[l].fn2);
    writeln;
    if (esimpar(k) < 3) and (esconexa(k)) then
    caminoeuleriano
   else
      writeln(output,'No solucion');
    readkey;
  end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar