Pagini recente » Cod sursa (job #1975637) | Cod sursa (job #2615249) | Cod sursa (job #2408366) | Cod sursa (job #3193739) | Cod sursa (job #2392135)
#include <iostream>
#include <limits.h>
#include <fstream>
using namespace std;
const int maxn=5001;
const int maxm=250001;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int minim(int *dist, bool *viz, int N)
{
int dist_min=INT_MAX, poz;
for(int i=0; i<N; i++)
if(dist[i]<dist_min && !viz[i])
dist_min=dist[i], poz=i;
return poz;
}
int dijkstra(int **&graph,int N, int src)
{
bool viz[N];
int dist[N];
for(int i=0; i<N; i++)
viz[i]=false, dist[i]=INT_MAX;
dist[src]=0;
for(int count=0; count<N; count++)
{
/*int dist_min=INT_MAX, poz;
for(int i=0; i<N; i++)
if(dist[i]<dist_min && !viz[i])
dist_min=dist[i], poz=i;*/
int u=minim(dist,viz,N);
viz[u]=true;
for( int v=0; v<N; v++)
if(!viz[v] && dist[v]> dist[u]+graph[u][v] && graph[u][v]!=0)
dist[v]=dist[u]+graph[u][v];
}
for(int i=1; i<N; i++)
out<<dist[i]<<" ";
}
int main()
{
int N, M, x, y, p;
in>>N>>M;
int **graph=new int*[N];
for(int i=0; i<N; i++)
{
graph[i]=new int[N];
for(int j=0; j<N; j++)
graph[i][j]=0;
}
while(M)
{
in>>x>>y>>p;
graph[x-1][y-1]=graph[y-1][x-1]=p;
M--;
}
dijkstra(graph,N,0);
return 0;
}