Pagini recente » Cod sursa (job #1393557) | Cod sursa (job #1643027) | Cod sursa (job #2529606) | Cod sursa (job #2719127) | Cod sursa (job #265954)
Cod sursa(job #265954)
#include <iostream>
#include <fstream>
using namespace std;
int v[10000][10000];
int noduri;
int sel[10000];
int par[10000];
int dist[10000];
void citire();
void afisare();
void init();
const int inf=0x7fffffff/2;
int nod_nevizitat()
{
int k=inf;
int NOD;
for(int i=2; i<=noduri; i++)
if( dist[i]<k && sel[i]==false )
{
k=dist[i];
NOD=i;
}
if(k!=inf)
return NOD;
return 0;
}
void dijkstra(int k)
{
sel[k]=true;
for(int i=2; i<=noduri; i++)
if(dist[i] > dist[k]+v[k][i])
dist[i]=dist[k]+v[k][i];
}
int main()
{
citire();
init();
int k=nod_nevizitat();
while(k)
{
dijkstra(k);
k=nod_nevizitat();
}
afisare();
/*cin.sync();
cin.get();*/
return 0;
}
void init()
{
for(int i=1; i<=noduri; i++)
if(v[1][i]!=0)
dist[i]=v[1][i];
}
void afisare()
{
/*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]<<" ";*/
fstream g;
g.open("dijkstra.out",ios::out);
for(int i=2; i<=noduri; i++)
if(dist[i]>=inf)
g<<"0 ";
else
g<<dist[i]<<" ";
g.close();
}
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();
for(int i=1; i<=noduri; i++)
for(int j=1; j<=noduri; j++)
if(i!=j && v[i][j]==0)
v[i][j]=inf;
}