enhorabuena y gracias por la labor que hacéis. Tengo que decir que soy novato
en esto de Flash y ActionScript, aunque sí que tengo alguna idea de Java, cosa
que almenos me ha ayuadado mucho en la compresión del codigo AS. En fin,
que llevo poco tiempo con esto y aun no se muy bien como funciona todo.
No me extiendo más y voy al grano:
Estoy intentado realizar una aplicación en Flash que dada la matriz
de adycecias de un grafo me calcule el camino más corto desde un vertice
al resto. A este problema da solución el algoritmo de Dijkstra, el cual
ya está implementado en una clase que he creado en un .AS, y en mi
pelicula fash, he insertado en el primer fotograma clave
el siguente código:
Código :
import Dijkstra //El grafo que yo tendré que implementar tendrá no menos de 150 vertices, esto es de prueba f0 = new Array(0, 1, 1000000, 1000000, 100, 100,7); f1 = new Array(15, 0, 1, 1000000, 1000000, 1000000,1000000); f2 = new Array(1000000, 1000000, 0, 1, 1000000, 1000000,4); f3 = new Array(1000000, 2, 1000000, 0, 1, 1000000); f4 = new Array(1000000, 1000000, 10, 1000000, 0, 1,7); f5 = new Array(1000000, 1000000, 17, 20, 1000000, 0,1); f6 = new Array(1000000,10000000,22,333,4,5,0); ourMap = new Array(f0,f1,f2,f3,f4,f5); var dijkstra = new Dijkstra(ourMap, 0, 1000000); dijkstra.findShortestPath();
en el .AS donde tengo la clase Dijkstra que ha sido importada
tengo, ademas de todo el algortimo, la siguiente función:
Código :
private function getResults():Void {
var ourShortestPath = new Array();
for (var i = 0; i < this.numberOfNodes; i++) {
ourShortestPath[i] = new Array();
var endNode = null;
var currNode = i;
ourShortestPath[i].push(i);
while(endNode != this.startNode) {
ourShortestPath[i].push(this.previousNode[currNode]);
endNode = this.previousNode[currNode];
currNode = this.previousNode[currNode];
}
ourShortestPath[i].reverse();
trace("---------------------------------------");
trace("The shortest distance from the startNode: "+this.startNode+
", to node "+i+": is -> "+this.distance[i]);
trace("The shortest path from the startNode: "+this.startNode+
", to node "+i+": is -> "+ourShortestPath[i]);
trace("---------------------------------------");
}Esto funciona a la perfección, me devuelve por la salida, la distancia
(mas corta) entre el nodo origen y el nodo actual (el 6).
Hasta aquí bien, pero de momento no hay nada de interfaz, entonces, ahora
lo que pretendo es crear una interfaz que, mediante un forrmulario, me
permita variar el punto de destino, es decir, la i que da valor a currNode.
¿es esto posible? permitir al usuario cambiar el actionscript(supongo que si)
y la salida, ¿podría mostrarse en una caja de texto dinámico incluida
en la interfaz?
Con que alguien me orientara sobre eso me conformaría, creo que ya podría
averiguar como hacer las demás cosas que me gustaría hacer. Como poder cambiar
los pesos de las adyacencias, variar el vertice origen también, y ya el sueño
sería poder plasmar el grafo en otra pelicula de manera que los vertices
sean objetos que por ejemplo cambien su color si forman parte del
camino más corto.(esto como digo sería pa'nota, me gustaría hacerlo por aprender
pero no creo que tenga tiempo antes de la entrega de este "trabajito".
Perdonad si me extendí mucho. Puedan o no ayudarme...gracias, ya me ayudásteis.
