Matlab - Como Graficar El algoritmo de Prim

 
Vista:

Como Graficar El algoritmo de Prim

Publicado por Leandro (1 intervención) el 11/05/2011 16:06:16
COMO LE HAGO PARA GRAFICAR LAS ARISTAS QUE SE UNES, PERO PAUSANDO EN CADA INTERACION, ES DECIR QUE SE MUESTRE ARISTA POR ARISTA

%tengo el algoritmo de prim
function [mst, cost] = prim(A)

% El usuario suministra una matriz A que es la matriz de adyacencia que
% caracteriza al grafo. Este programa hace uso del Algoritmo de Prim para
% encontrar un árbol de expansión mínima.This program uses. Las aristas del
% árbol de expansión minima se guardan en el arreglo mst {de tamaño n-1 por
% 2}, y el costo total e guardado en la variable cost. El programa muestra
% en la variable y hace una pausa para que el usuario puede ver lo que está
% sucediendo. Para continuar después de una pausa, pulse cualquier
% tecla.A=[0 6 1 5 0 0; 6 0 5 0 3 0; 1 5 0 5 6 4; 5 0 5 0 0 2; 0 3 6 0 0 6; 0 0 4 2 6 0]
disp('ejemplo : [0 6 1 5 0 0; 6 0 5 0 3 0; 1 5 0 5 6 4; 5 0 5 0 0 2; 0 3 6 0 0 6; 0 0 4 2 6 0]')
A=input('INGRESE LOS VALORES DE LA MATRÍZ: ');


[n,n] = size(A); % Matriz de tamaño n por n, donde n = # nodos.
A,
n,
pause,

if norm(A-A','fro') ~= 0 , % Si la matriz de adyacencia no es simetrica,
disp(' Error: La matriz de Adyacencia debe ser simétrica ') % Imprime un mensaje de error y sale.
return,
end;

% Comienza con el nodo 1 y hacer un seguimiento de cuales nodos están en el
% árbol y cuales no lo están.

intree = [1];
number_in_tree = 1;
number_of_edges = 0;
notintree = [2:n]';
number_notin_tree = n-1;

in = intree(1:number_in_tree), % imprime los nodos que están en el árbol

out = notintree(1:number_notin_tree), pause, % y cuales no.

% Iterar hasta que todos los n nodos están en el árbol.

while number_in_tree < n,

% Find the cheapest edge from a node that is in tree to one that is not.

mincost = Inf; % You can actually enter infinity into Matlab.
for i=1:number_in_tree,
for j=1:number_notin_tree,
ii = intree(i); jj = notintree(j);
if A(ii,jj) < mincost && A(ii,jj) ~= 0,
mincost = A(ii,jj);
jsave = j;
iisave = ii;
jjsave = jj; % Save coords of node.
end;
end;
end;

% Add this edge and associated node jjsave to tree. Delete node jsave from list
% of those not in tree.

number_of_edges = number_of_edges + 1; % Increment number of edges in tree.
mst(number_of_edges,1) = iisave; % Add this edge to tree.
mst(number_of_edges,2) = jjsave;
costs(number_of_edges,1) = mincost;

number_in_tree = number_in_tree + 1; % Increment number of nodes that tree connects.
intree = [intree; jjsave]; % Add this node to tree.
for j=jsave+1:number_notin_tree, % Delete this node from list of those not in tree.
notintree(j-1) = notintree(j);
end;
number_notin_tree = number_notin_tree - 1; % Decrement number of nodes not in tree.

in = intree(1:number_in_tree), % Print which nodes are now in tree and
out = notintree(1:number_notin_tree), pause,% which are not.

end;
disp(' Aristas en el árbol de expansión mínimo y sus costos ')
[mst costs] % Print out edges in minimum spanning tree.
cost = sum(costs)
disp('Aristas que Se Unen')


%como hago para graficar las aristas que se unen
%gracias!!!
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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Como Graficar El algoritmo de Prim

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 11/05/2011 19:14:37
HOLA LEONARDO.

Mi pregunta seria y ¿cual es la arista en tu programa.?
¿ En que variable lo estas guaradando.?
¿Y dentro del bucle while en que parte se esta generando?.
Trate de ser más especifico en tus preguntas para tener respuestas acertadas y en corto tiempo.
Caso contrario no te van a contestar y seguiras esperando y esperando. Como sucede con algunas preguntas del foro. Simplemente nadie contesta, porque sus preguntas no son claras.

Entiendo los pasos de tu programa, pero en global que hace tu programa no lo entiendo.
Ademas en yahoo respuestas te he contestado y nos haz dicho cual de las graficas era la correcta.

http://es.answers.yahoo.com/question/index;_ylt=AlHPlMnEhJ0e0NEFZ_n3zA6R.gt.;_ylv=3?qid=20110510203631AAIynjK

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[email protected]
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