Pagini recente » Cod sursa (job #3266774) | Cod sursa (job #1054734) | Cod sursa (job #2669487) | Statistici Laura M (laura2018) | Cod sursa (job #754490)
Cod sursa(job #754490)
#include <fstream>
#include <vector>
#include <iostream>
#include <map>
using namespace std;
struct Node;
struct Muchie
{
Node *start;
Node *end;
int cost;
Muchie(Node *s,Node *e,int c):start(s),end(e),cost(c){}
Muchie(){}
};
struct Node
{
int ID;
vector<Muchie *> neigh;
Node(int i):ID(i){}
Node(){}
};
const unsigned int INF = 150000000;
Node *nodeMap[50002];
int mc = 0;
int dist[50002];
int viz[500002];
int noduri,muchii;
int det_min_neviz()
{
int k = 0;
int min = INF;
for(int i = 2; i<=noduri; i++)
if(dist[i] < min && viz[i] == 0)
{
min = dist[i];
k = i;
}
return k;
}
int main()
{
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
fin>>noduri>>muchii;
for(int i = 0; i<muchii; i++)
{
int n1,n2,cost;
fin>>n1>>n2>>cost;
if(nodeMap[n1] == NULL)
nodeMap[n1] = new Node(n1);
if(nodeMap[n2] == NULL)
nodeMap[n2] = new Node(n2);
nodeMap[n1]->neigh.push_back(new Muchie(nodeMap[n1],nodeMap[n2],cost));
}
viz[1] = 1;
for(int i = 2; i<=noduri; i++)
dist[i] = INF;
for(unsigned int i=0; i<nodeMap[1]->neigh.size(); i++)
{
int c = nodeMap[1]->neigh[i]->end->ID;
dist[c] = nodeMap[1]->neigh[i]->cost;
}
int k;
while(1)
{
k = det_min_neviz();
if(k==0)
break;
viz[k] = 1;
for(unsigned int i =0;i<nodeMap[k]->neigh.size(); i++)
if(dist[nodeMap[k]->neigh[i]->end->ID] > dist[k] + nodeMap[k]->neigh[i]->cost)
dist[nodeMap[k]->neigh[i]->end->ID] = dist[k] + nodeMap[k]->neigh[i]->cost;
}
for(int i = 2; i<=noduri; i++)
{
if(dist[i] < INF)
fout<<dist[i]<<" ";
else
fout<<0<<" ";
}
return 0;
}