Pagini recente » Cod sursa (job #155077) | Cod sursa (job #2259721) | Cod sursa (job #2913402) | Cod sursa (job #1402870) | Cod sursa (job #265628)
Cod sursa(job #265628)
void citire();
void afisare();
#include <iostream>
#include <fstream>
using namespace std;
int v[50000][50000];
int noduri;
int sel[50000];
int par[50000];
int dist[50000];
int ramase;
void dijkstra(int nod)
{
sel[nod]=true;
ramase--;
//daca nu a fost selectat, exista drum de la nod la i si dista
int DM=0;
int NOD=0;
do
{
DM=0;
NOD=0;
for(int i=1; i<=noduri; i++)
if(sel[i]==false && v[nod][i] && (dist[i]>dist[nod]+v[nod][i] || dist[i]==0) )
{
dist[i]=dist[nod]+v[nod][i];
par[i]=nod;
if( (DM>dist[i]) || DM==0)
{
DM=dist[i];
NOD=i;
}
}
else if(sel[i]==false && v[nod][i] && (DM>dist[i] || DM==0) )
{
DM=dist[i];
NOD=i;
}
if(NOD!=0)
dijkstra(NOD);
}while( NOD!=0 && ramase!=0);
}
int main()
{
citire();
ramase=noduri;
dijkstra(1);
afisare();
/*cin.sync();
cin.get();*/
return 0;
}
void afisare()
{
fstream f;
f.open("dijkstra.out",ios::out);
for(int i=2; i<=noduri; i++)
f<<dist[i]<<" ";
f.close();
/*for(int i=1; i<=noduri; i++)
{
cout<<endl;
for(int j=1; j<=noduri; j++)
cout<<v[i][j]<<" ";
}
cout<<endl<<endl;
for(int i=1; i<=noduri; i++)
cout<<sel[i]<<" ";
cout<<endl;
for(int i=1; i<=noduri; i++)
cout<<par[i]<<" ";
cout<<endl;
for(int i=1; i<=noduri; i++)
cout<<dist[i]<<" ";*/
}
void citire()
{
fstream f;
f.open("dijkstra.in",ios::in);
int muchii;
f>>noduri>>muchii;
for(int i=1; i<=muchii; i++)
{
int x,y,z;
f>>x>>y>>z;
v[x][y]=z;
v[y][x]=z;
}
f.close();
}