Pagini recente » Cod sursa (job #1325878) | Cod sursa (job #2587859) | Cod sursa (job #3004583) | Cod sursa (job #2801972) | Cod sursa (job #1653284)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
struct varf
{
int st;
int dp;
int su;
};
/*void Citeste(vector<int> graph[],int E)
{
int v1,v2;
for (int i = 1; i<=E; i++)
{
f >> v1 >> v2;
graph[v1].push_back(v2);
graph[v2].push_back(v1);
}
} */
int main()
{
int V,E, urm;
f >> V >> E;
//vector<int> graph[V];
int vert[V][V];
int v1,v2, pondere, totPond(0);
for (int i = 0; i<V; i++)
for (int j = 0; j<V; j++)
vert[i][j] = 0;
for (int i = 1; i<=E; i++)
{
f >> v1 >> v2 >> pondere;
totPond += pondere;
v1--; v2--;
vert[v1][v2] = pondere;
vert[v2][v1] = pondere;
}
int s;
s = 0;
varf M[V];
for (int i = 0; i<V; i++)
{
M[i].dp = totPond +1;
M[i].st = 0;
M[i].su = 0;
}
M[s].dp = 0;
M[s].st = 1;
M[s].su = s;
urm = s;
/* for (int i = 0; i<V; i++)
{
cout << endl;
for (int j = 0; j<V; j++)
cout << vert[i][j] << " ";
}*/
while (urm != -1)
{
for (int i = 0; i<V; i++)
{
if ((vert[urm][i] != 0) && (M[i].st!=2))
if (M[i].dp > M[urm].dp + vert[urm][i])
{
M[i].dp = M[urm].dp + vert[urm][i];
M[i].su = urm;
M[i].st = 1;
}
}
M[urm].st = 2;
int temp = -1;
int dist = totPond + 1;
for (int i = 0; i<V; i++)
{
if ((M[i].st == 1) and (M[i].dp < dist)) {
temp = i;
dist = M[i].dp;}
}
urm = temp;
}
for (int i=1; i<V; i++)
if (M[i].dp == totPond+1)
g << "0";
else
g << M[i].dp << " ";
}