Pagini recente » Cod sursa (job #2583380) | Cod sursa (job #1817126) | Cod sursa (job #1871275) | Cod sursa (job #24389) | Cod sursa (job #2286167)
#include <bits/stdc++.h>
using namespace std;
ifstream f("royfloyd.in");
ofstream g("royfloyd.out");
const int NMAX=1e2+5;
vector < pair <int, int> > G[NMAX];
priority_queue < pair <int, int>, vector < pair <int, int> >, greater < pair <int, int> > > H;
int N, i, j, C;
int Sol[NMAX];
bool Sel[NMAX];
void Dijkstra (int S)
{
Sol[S]=0;
Sel[S]=true;
for(int i=0; i<G[S].size(); ++i)
{
Sol[G[S][i].first]=G[S][i].second;
H.push({G[S][i].second, G[S][i].first});
}
int cnt=G[S].size();
while(cnt)
{
while(Sel[H.top().second]==true)
H.pop();
int nod=H.top().second;
Sel[nod]=true;
H.pop();
cnt--;
for(int i=0; i<G[nod].size(); ++i)
{
int j=G[nod][i].first;
if(Sol[j]==INT_MIN)
{
Sol[j]=Sol[nod]+G[nod][i].second;
H.push({Sol[j], j});
cnt++;
}
else if(Sol[nod] + G[nod][i].second < Sol[j])
{
Sol[j]=Sol[nod]+G[nod][i].second;
H.push({Sol[j], j});
}
}
}
for(int i=1; i<=N; ++i)
{
if(Sol[i]==INT_MIN)
g<<0<<' ';
else
g<<Sol[i]<<' ';
Sol[i]=INT_MIN;
Sel[i]=false;
}
g<<'\n';
while(!H.empty())
H.pop();
}
int main()
{
f.tie(NULL);
f>>N;
for(i=1; i<=N; ++i)
{
for(j=1; j<=N; ++j)
{
f>>C;
if(C)
G[i].push_back({j, C});
}
Sol[i]=INT_MIN;
}
for(int i=1; i<=N; ++i)
Dijkstra(i);
return 0;
}