Cod sursa(job #673454)

Utilizator wink.itsgoneDragusanu Ana wink.itsgone Data 4 februarie 2012 15:21:16
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include<cstdio>
#include<vector>
using namespace std;
#define MAXN 50001
#define inf 0x3f3f3f3f
int n,m;
struct graf{int nod,cost;};
vector <graf> a[MAXN];
int d[MAXN], q[MAXN];
inline void adauga(int,int,int);
void citeste(),rezolva(),scrie();
int main()
{
 freopen("dijkstra.in","rt",stdin);
 freopen("dijkstra.out","wt",stdout);
 citeste(); rezolva(); scrie(); return 0;
}
inline void adauga(int x,int y,int z)
{
 graf g;
 g.nod=y; g.cost=z; a[x].push_back(g);
}
void citeste()
{
 scanf("%d%d",&n,&m);
 for(int x,y,z,i=1;i<=m;++i) scanf("%d%d%d",&x,&y,&z),adauga(x,y,z);
}
/*void rezolva()
{
 for(int i=2;i<=n;++i) d[i]=inf;
 int min,pmin=0;
 for (int i=1;i<=n;++i)
	{
	 min=inf;
	 for (int j=1;j<=n;++j) if(d[j] < min && !q[j] ) min = 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 rezolva()
{
 for(int i=2;i<=n;++i) d[i]=inf;
 int min,pmin=0;
 for(int i=1;i<=n;++i)
	{
	 min=inf;
	 for(int j=1;j<=n;++j) if(d[j]<min && !q[j]) min=d[j],pmin=j;
	 q[pmin]=1;
	 for(unsigned 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 scrie()
{
 for(int i=2;i<=n;++i) printf("%d ",(d[i]==inf?0:d[i]));
}