Pagini recente » Diferente pentru utilizator/nod_software intre reviziile 162 si 77 | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1749122) | Cod sursa (job #1850046)
#include <fstream>
#include<vector>
#include<queue>
#define pp pair<int,int>
#define inf 99999
#include<string.h>
using namespace std;
ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");
vector<pp> a[10001];
priority_queue<pp,vector<pp>,greater<pp> > q;
int d[10001],n,m;
void cit(){
int i,j,h,w;
fin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
fin>>w;
if(w!=0)
a[i].push_back(pp(j,w));
}
fin.close();
}
void dijkstra(int r){
pp p;
int i,k,x,y;
for(i=1;i<=n;i++)
if(i!=r)
d[i]=inf;
q.push(make_pair(0,r));
while(!q.empty()){
p=q.top();
q.pop();
k=p.second;
if(d[k]!=p.first)
continue;
for(i=0;i<a[k].size();i++){
x=a[k][i].first;
y=a[k][i].second;
if(d[x]>d[k]+y){
d[x]=d[k]+y;
q.push(make_pair(d[x],x));
}
}
}
}
int main(){
cit();
int i,j;
for(i=1;i<=n;i++){
dijkstra(i);
for(j=1;j<=n;j++)
if(j!=i){
if(d[j]==inf)
fout<<0<<" ";
else
fout<<d[j]<<" ";
}
else
fout<<0<<" ";
fout<<'\n';
memset(d,0,sizeof(d));
}
fout.close();
return 0;
}