Cod sursa(job #671437)

Utilizator Codrutzu15tapu codrut Codrutzu15 Data 31 ianuarie 2012 14:31:17
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<fstream>
#include<vector>
#define maxn 50001
#define inf 0x3fffffff
using namespace std;
ifstream f("dijkstra.in"); ofstream g("dijkstra.out");
struct graf {int nod, cost; };
int n,m;
vector <graf> a[maxn];
int d[maxn], q[maxn];
inline void add(int , int , int );
void read(),solve(),write();
int main()
{read(); 
 solve();
 write();
 return 0;
}
inline void add(int x, int y, int z)
{graf e;
 e.nod=y; e.cost=z; a[x].push_back(e);
}
void read()
{f>>n>>m;
 for(int x,y,z,i=1;i<=m;++i) f>>x>>y>>z,add(x, y, z); 
}
void solve() //Dijkstra
{for(int i=2;i<=n;++i) d[i]=inf;
 int minim, pmin = 0;
    for ( int i = 1; i <= n; ++i )
		{minim = inf;
        for ( int j = 1; j <= n; ++j ) if ( d[j] < minim && !q[j] ) minim = d[j], pmin = j;
        q[pmin] = 1;
		for(unsigned int j=0; j<a[pmin].size(); ++j)
			{int wnod=a[pmin][j].nod,wcost=a[pmin][j].cost;
			 if(d[wnod] > d[pmin]+wcost) d[wnod] = d[pmin]+wcost;
			}
    }
}
void write()
{for( int i = 2; i <= n; ++i ) g<<(d[i] == inf ? 0 : d[i])<<' ';
 g<<'\n'; g.close();
}