como se puede observar se me pide Elaborar un programa en C++ utilizando el algoritmo de Dijkstra para encontrar la ruta de coste mínimo entre 1 y el resto de nodos de la red si se asume que 1 manda la misma información a todos los terminales,
¿Cuál sería el número medio de enlaces que un paquete atravesaría antes de llegar a su destino?
haciendo un algoritmo que podría ofrecer un mejor rendimiento, sabiendo que la información que 1 transmite es la misma para todos los nodos.
he realizado el siguiente código
Código:
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
typedef pair<int, int> iPair;
class Graph
{
int V;
list<pair<int, int>>* adj;
public:
Graph(int V)
{
this->V = V;
adj = new list<iPair>[V];
}
void addEdge(int u, int v, int w);
void shortestPathingraph(int s);
};
void Graph::addEdge(int u, int v, int w)
{
adj[u].push_back(make_pair(v, w));
adj[v].push_back(make_pair(u, w));
}
void Graph::shortestPathingraph(int src)
{
priority_queue<iPair, vector<iPair>, greater<iPair>> pq;
vector<int> dist(V, INF);
pq.push(make_pair(0, src));
dist[src] = 0;
while (!pq.empty()) {
int u = pq.top().second;
pq.pop();
list<pair<int, int>>::iterator i;
for (i = adj[u].begin(); i != adj[u].end(); ++i) {
int v = (*i).first;
int weight = (*i).second;
if (dist[v] > dist[u] + weight) {
// Updating distance of v
dist[v] = dist[u] + weight;
pq.push(make_pair(dist[v], v));
}
}
}
printf("Vertex \tDistance from Source\n");
for (int i = 1; i < V; ++i)
printf("%d \t\t %d\n", i, dist[i]);
}
int main()
{
int V = 7;
Graph g(V);
g.addEdge(1, 2, 2);
g.addEdge(1, 3, 3);
g.addEdge(1, 4, 1);
g.addEdge(2, 3, 1);
g.addEdge(2, 4, 3);
g.addEdge(2, 5, 1);
g.addEdge(2, 6, 3);
g.addEdge(3, 4, 2);
g.addEdge(3, 5, 2);
g.addEdge(4, 6, 5);
g.addEdge(5, 6, 1);
g.shortestPathingraph(0);
return 0;
}
dando como resultado
Que estaré haciendo mal
espero puedan ayudarme estoy a la espera de sus consejos
muchísimas gracias