program GrafoNoDirigido;
const
MAX = 10;
type
Nodo = record
valor: integer;
visitado: boolean;
end;
Grafo = array[1..MAX, 1..MAX] of boolean;
Nodos = array[1..MAX] of Nodo;
var
nodos: Nodos;
matrizAdyacencia: Grafo;
numNodos, numAristas: integer;
procedure InicializarNodos;
var
i: integer;
begin
for i := 1 to MAX do
begin
nodos[i].valor := i;
nodos[i].visitado := false;
end;
end;
procedure AgregarArista(var grafo: Grafo; origen, destino: integer);
begin
grafo[origen, destino] := true;
grafo[destino, origen] := true;
end;
procedure MostrarDFS(grafo: Grafo; nodoActual: integer);
var
i: integer;
begin
if not nodos[nodoActual].visitado then
begin
writeln('Visitando nodo: ', nodoActual);
nodos[nodoActual].visitado := true;
for i := 1 to numNodos do
begin
if grafo[nodoActual, i] and (not nodos[i].visitado) then
MostrarDFS(grafo, i);
end;
end;
end;
procedure MostrarGrafo(grafo: Grafo);
var
i, j: integer;
begin
writeln('Matriz de adyacencia del grafo:');
for i := 1 to numNodos do
begin
for j := 1 to numNodos do
write(grafo[i, j]:2, ' ');
writeln;
end;
end;
begin
writeln('Ingrese el número de nodos del grafo (máximo 10): ');
readln(numNodos);
if (numNodos < 1) or (numNodos > MAX) then
begin
writeln('Número de nodos inválido. Debe estar entre 1 y ', MAX);
halt;
end;
InicializarNodos;
writeln('Ingrese el número de aristas del grafo: ');
readln(numAristas);
for var i := 1 to numAristas do
begin
writeln('Ingrese la arista ', i, ' (origen destino): ');
var origen, destino: integer;
readln(origen, destino);
AgregarArista(matrizAdyacencia, origen, destino);
end;
MostrarGrafo(matrizAdyacencia);
writeln('Recorrido en profundidad (DFS):');
for var i := 1 to numNodos do
MostrarDFS(matrizAdyacencia, i);
readln;
end.