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!!!
Sino sabes VB ..
Aqui te lo dejo en C++ xq en VB no lo encontre
#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
}
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)
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.
Aca hay una excelente implementacion del algoritmo en VB mas ejemplo.
http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=59974&lngWId=1