Algoritmo de Dijkstra en Visual Basic

Iniciado por laukibuk, 16 Enero 2008, 16:39 PM

0 Miembros y 1 Visitante están viendo este tema.

laukibuk

Hola, tengo que hacer un programa en visual basic que implemente el Algoritmo de Dijkstra y estoy completamente perdida porque no tengo ni idea de visual. En la carrera solo he visto C y Java... Alguien me puede echar una mano??

Muchas gracias!!!

Dynamique

Sino sabes VB ..

Aqui te lo dejo en C++ xq en VB no lo encontre


Código (cpp) [Seleccionar]

#include <map>
#include <queue>
using namespace std;

#define X first
#define Y second

template <class Node, class Edge=int> class Dijkstra {
   public:
   Dijkstra() {}
   Dijkstra(const Node &n, const Edge &e=0) { push(n, e); }
   bool empty() const { return q.empty(); }
   void push(const Node &n, const Edge &e=0) {
      Iter it = m.find(n);
      if (it == m.end()) it = m.insert(make_pair(n, e)).X;
      else if (it<>Y > e) it->Y = e;
      else return;
      q.push(make_pair(e, it));
   }
   const Node &pop() {
      cur = q.top().Y;
      do q.pop();
      while (!q.empty() && q.top().Y->Y < q.top().X);
      return cur->X;
   }
   const Edge &dist() const { return cur->Y; }
   void link(const Node &n, const Edge &e=1) { push(n, cur->Y + e); }

   private:
   typedef typename map<Node, Edge>::iterator Iter;
   typedef pair<Edge, Iter> Value;
   struct Rank : public binary_function<Value, Value, bool> {
      bool operator()(const Value& x, const Value& y) const {
         return x.X > y.X;
      }
   };
   map<Node, Edge> m;
   priority_queue<Value, vector<Value>, Rank> q;
   Iter cur;
};

// Ejemplo de uso (nodos y arcos están representados con enteros)
int shortestDistance(int nodes, int startNode, int endNode, int **dists) {
   Dijkstra<int> dijkstra(startNode);
   while (!dijkstra.empty()) {
      int curNode = dijkstra.pop();
      if (curNode == endNode)
         return dijkstra.dist();
      for (int i = 0; i < nodes; i++)
         if (dists[curNode][i] >= 0) // "i" es un vecino de curNode
            dijkstra.link(i, dists[curNode][i]); // añade arco con peso
   }
   return -1; // Ningún camino encontrado
}
Código (php) [Seleccionar]
<?php echo "Hello, I am Dynamique"?>

cassiani

 Pero si tenes varios ejemplos en otros lenguajes, os tocara traducirlo:
http://es.wikipedia.org/wiki/Algoritmo_de_Dijkstra

laukibuk

Muchas gracias, el problema que tengo es que me piden que lo haga en visual, yo lo tenia en java de un ejercicio de clase, pero cuando se lo comente me dijo que no podia ser, que el proyecto estaba pensado para visual basic. Le echare un vistazo a ese en c a ver si puedo sacar algo en claro.


cobein

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.