Pagini recente » Cod sursa (job #1429869) | Cod sursa (job #633830) | Cod sursa (job #1769913) | Cod sursa (job #1672831) | Cod sursa (job #2860885)
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 1003
#define INF 1000000000000ll
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct varf {
int x, c;
};
vector <varf> G[NMAX];
int n, x0=1;
int c[NMAX][NMAX];
int d[NMAX];
int cmin[NMAX]={0, 100, 10, -10, 1, 23, 2};
int pre[NMAX];
bool uz[NMAX];
void citire();
void afisare();
void dijkstra();
class Compar
{
public:
bool operator() (int a, int b)
{
return cmin[a]>cmin[b];
}
};
priority_queue<int, vector<int>, Compar> H;
int main()
{
H.push(1);H.push(2);H.push(3);H.push(4);H.push(5);H.push(6);
while (!H.empty())
{
fout<<cmin[H.top()];
H.pop();
}
/*citire();
dijkstra();
afisare();
return 0; */
}
void citire()
{
int i, j, c, m;
varf aux;
fin>>n>>m;
while (fin>>i>>j>>c)
{
aux.x=j;
aux.c=c;
G[i].push_back(aux);
}
for (i=1; i<=n; i++)
cmin[i]=INF;
cmin[x0]=0;
}
void dijkstra()
{
int i, j, minim, vfmin;
H.push(x0);
for (i=1; i<=n; i++)
{
///calculez vfmin
vfmin=-1;
while (!H.empty())
{
vfmin=H.top(); H.pop();
if (!uz[vfmin])
break;
}
if (vfmin==-1)
break;
///selectez vfmin
uz[vfmin]=1;
minim=cmin[vfmin];
///optimizez eventual costurile minime
for (j=0; j<G[vfmin].size(); j++)
if (!uz[G[vfmin][j].x] && cmin[G[vfmin][j].x]> minim + G[vfmin][j].c)
{
cmin[G[vfmin][j].x]= minim+G[vfmin][j].c;
H.push(G[vfmin][j].x);
}
}
}
void afisare()
{
int i, j, cnt;
for (i=2; i<=n; i++)
if (cmin[i]==INF)
fout<< 0<<' ';
else
fout<<cmin[i]<<' ';
}