Cod sursa(job #623904)

Utilizator lily3Moldovan Liliana lily3 Data 20 octombrie 2011 21:59:42
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<fstream>
#include<queue>
#include<vector>
using namespace std;

int i,j,n,m,c[101][101],p1;
queue<int> q;
vector<int> a[101];
vector<int> b[101];
void det(int t)
{
	int i,x;
	q.push(t);
	c[t][t]=0;
	while(!q.empty())
	{
		x=q.front();
		for(i=0;i<a[x].size();++i)
			if(c[t][a[x][i]]>c[t][x]+b[x][i])
				c[t][a[x][i]]=c[t][x]+b[x][i],q.push(a[x][i]);
			q.pop();
	}
}
int main()
{
	freopen("royfloyd.in","r",stdin);
	freopen("royfloyd.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
		{
			scanf("%d",&p1);
			if(i!=j)
			{
			a[i].push_back(j);
			if(!p1)
				p1=100000;
			b[i].push_back(p1);
			c[i][j]=100000;
			}
		}
		for(i=1;i<=n;i++)
			det(i);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
			if(c[i][j]==100000)
				printf("0 ");
			else
			printf("%d ",c[i][j]);
		printf("\n");
	}
	return 0;
}