Pagini recente » Cod sursa (job #2289712) | Cod sursa (job #2228409) | Cod sursa (job #2043008) | Cod sursa (job #1836466) | Cod sursa (job #662499)
Cod sursa(job #662499)
#include<fstream>
#include<climits>
#define INF 300000
using namespace std;
ofstream out("dijkstra.out");
int a[100][100],n,m,uz[100],d[100],T[100],minim;
void citire();
void afis(int *q,int nr);
int dijkstra(int poz);
int main()
{
citire();
dijkstra(1);
afis(d,n);
out<<"\n";
return 0;
}
void citire()
{
int x,y,c,i,j;
ifstream in("dijkstra.in");
in>>n>>m;
for(int k=1;k<=m;k++)
{
in>>x>>y>>c;
a[x][y]=c;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i][j]==0&&i!=j)
a[i][j]=INF;
}
void afis(int *q,int nr)
{
for(int i=2;i<=n;i++)
out<<q[i]<<" ";
}
int dijkstra(int nod)
{
int i,j,poz;
for( i=1;i<=n;i++)
{
d[i]=a[nod][i];
uz[i]=0;
T[i]=nod;
}
uz[nod]=1;
T[nod]=0;
for( i=1;i<n;i++)
{
minim=INT_MAX;
for(int k=1;k<=n;k++)
if(uz[k]==0&&d[k]<minim)
{
minim=d[k];
poz=k;
}
uz[poz]=1;
for(int j=1;j<=n;j++)
if(uz[j]==0&&d[j]>d[poz]+a[poz][j])
{
d[j]=d[poz]+a[poz][j];
T[j]=poz;
}
}
}