Pagini recente » Cod sursa (job #2981663) | Cod sursa (job #1037053) | Cod sursa (job #2735302) | Cod sursa (job #2045725) | Cod sursa (job #425968)
Cod sursa(job #425968)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
int n;
int coada[5000];
vector<pair<int,int> > succ[101];
bool v[101],marc[101];
int cost[101][101];
void citire()
{
scanf("%d",&n);
int x;
for (int i=1;i<=n;++i)
for (int j=1;j<=n;++j)
{
scanf("%d",&x);
if (x)
succ[i].push_back(make_pair(j,x));
}
}
int main()
{
freopen ("royfloyd.in","r",stdin);
freopen ("royfloyd.out","w",stdout);
citire();
for (int i=1;i<=n;++i)
{
int r=1;
coada[1]=i;
memset(marc,0,sizeof(marc));
memset(v,0,sizeof(v));
marc[i]=1;
v[i]=1;
for (int p=1;p<=r;++p)
{
int nod=coada[p];
marc[nod]=0;
for (int j=0;j!=succ[nod].size();++j)
{
if (!v[succ[nod][j].first]||cost[i][succ[nod][j].first]>cost[i][nod]+succ[nod][j].second)
{
if (!marc[succ[nod][j].first])
{
marc[succ[nod][j].first]=1;
coada[++r]=succ[nod][j].first;
}
cost[i][succ[nod][j].first]=cost[i][nod]+succ[nod][j].second;
v[succ[nod][j].first]=1;
}
}
}
for (int j=1;j<=n;++j)
printf("%d ",cost[i][j]);
printf("\n");
}
return 0;
}