Pagini recente » Cod sursa (job #955832) | Cod sursa (job #2275780) | Cod sursa (job #1550631) | Cod sursa (job #2657598) | Cod sursa (job #1650276)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("dijkstra.in");
ofstream w("dijkstra.out");
int n, m, nt[2000][2000], d[1999];
void beolvas() {
f>>n>>m;
int x, y, r;
for (int i=0;i<n;i++) for (int j=0;j<n;j++) nt[i][j]=0;
for (int i=0;i<m;i++) {
f>>x>>y>>r;
nt[x-1][y-1]=r;
nt[y-1][x-1]=r;
}
}
void bejaras() {
int min, mini1, mini2;
bool b[n], kesz=false;
for (int i=1;i<n;i++) {d[i]=nt[0][i];b[i]=false;}
while (!kesz) {
min=1001;
mini1=n;
for (int i=1;i<n;i++) {
if (min>d[i] && !b[i] && d[i]!=0) {
min=d[i];
mini1=i;
}
}
if (mini1!=n) {
b[mini1]=true;
min=1001;
mini2=n;
for (int i=0;i<n;i++) {
if (min>nt[mini1][i] && nt[mini1][i]!=0 && !b[i]) {
mini2=i;
min=nt[mini1][i];
}
}
if (mini2!=n && (d[mini1]+min<d[mini2] || d[mini2]==0)) d[mini2]=d[mini1]+min;
}
kesz=true;
for (int i=1;i<n;i++) if (!b[i]) kesz=false;
}
for (int i=1;i<n;i++) w<<d[i]<<" ";
}
int main()
{
beolvas();
bejaras();
f.close();
w.close();
}