Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: laukibuk en 16 Enero 2008, 16:39 pm



Título: Algoritmo de Dijkstra en Visual Basic
Publicado por: laukibuk en 16 Enero 2008, 16:39 pm
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!!!


Título: Re: Algoritmo de Dijkstra en Visual Basic
Publicado por: Dynamique en 16 Enero 2008, 16:44 pm
Sino sabes VB ..

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


Código
  1. #include <map>
  2. #include <queue>
  3. using namespace std;
  4.  
  5. #define X first
  6. #define Y second
  7.  
  8. template <class Node, class Edge=int> class Dijkstra {
  9.   public:
  10.   Dijkstra() {}
  11.   Dijkstra(const Node &n, const Edge &e=0) { push(n, e); }
  12.   bool empty() const { return q.empty(); }
  13.   void push(const Node &n, const Edge &e=0) {
  14.      Iter it = m.find(n);
  15.      if (it == m.end()) it = m.insert(make_pair(n, e)).X;
  16.      else if (it<>Y > e) it->Y = e;
  17.      else return;
  18.      q.push(make_pair(e, it));
  19.   }
  20.   const Node &pop() {
  21.      cur = q.top().Y;
  22.      do q.pop();
  23.      while (!q.empty() && q.top().Y->Y < q.top().X);
  24.      return cur->X;
  25.   }
  26.   const Edge &dist() const { return cur->Y; }
  27.   void link(const Node &n, const Edge &e=1) { push(n, cur->Y + e); }
  28.  
  29.   private:
  30.   typedef typename map<Node, Edge>::iterator Iter;
  31.   typedef pair<Edge, Iter> Value;
  32.   struct Rank : public binary_function<Value, Value, bool> {
  33.      bool operator()(const Value& x, const Value& y) const {
  34.         return x.X > y.X;
  35.      }
  36.   };
  37.   map<Node, Edge> m;
  38.   priority_queue<Value, vector<Value>, Rank> q;
  39.   Iter cur;
  40. };
  41.  
  42. // Ejemplo de uso (nodos y arcos están representados con enteros)
  43. int shortestDistance(int nodes, int startNode, int endNode, int **dists) {
  44.   Dijkstra<int> dijkstra(startNode);
  45.   while (!dijkstra.empty()) {
  46.      int curNode = dijkstra.pop();
  47.      if (curNode == endNode)
  48.         return dijkstra.dist();
  49.      for (int i = 0; i < nodes; i++)
  50.         if (dists[curNode][i] >= 0) // "i" es un vecino de curNode
  51.            dijkstra.link(i, dists[curNode][i]); // añade arco con peso
  52.   }
  53.   return -1; // Ningún camino encontrado
  54. }


Título: Re: Algoritmo de Dijkstra en Visual Basic
Publicado por: cassiani en 16 Enero 2008, 16:50 pm
 Pero si tenes varios ejemplos en otros lenguajes, os tocara traducirlo:
http://es.wikipedia.org/wiki/Algoritmo_de_Dijkstra (http://es.wikipedia.org/wiki/Algoritmo_de_Dijkstra)


Título: Re: Algoritmo de Dijkstra en Visual Basic
Publicado por: laukibuk en 16 Enero 2008, 17:33 pm
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.



Título: Re: Algoritmo de Dijkstra en Visual Basic
Publicado por: cobein en 17 Enero 2008, 07:32 am
Aca hay una excelente implementacion del algoritmo en VB mas ejemplo.

http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=59974&lngWId=1