Cod sursa(job #655428)

Utilizator valentina506Moraru Valentina valentina506 Data 2 ianuarie 2012 16:17:59
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<fstream>
#include<vector>
#include<queue>
#define inf 1<<30
using namespace std;
int n,m,i,j,x,y,z,c[101][101];
struct dijks
{
	int nod,cost;
};
vector<dijks> a[101];
queue<int> q;
void dijkstra(int x,int niv)
{
	int i;
	q.push(x);
	
	while(!q.empty())
	{
		x=q.front();
		for(i=0;i<a[x].size();++i)
			if(c[niv][a[x][i].nod]>c[niv][x]+a[x][i].cost)
			{
				c[niv][a[x][i].nod]=c[niv][x]+a[x][i].cost;
				q.push(a[x][i].nod);
			}
			q.pop();
	}
}
			
				
		
		
int main()
{
	ifstream f("royfloyd.in");
	ofstream g("royfloyd.out");
	f>>n;
	for(i=1;i<=n;++i)
	for(j=1;j<=n;++j)
	{
		c[i][j]=1000000000;
		f>>x;
		if(x)
		a[i].push_back((dijks){j,x});
	}
	for(i=1;i<=n;++i)
	{
		c[i][i]=0;
	dijkstra(i,i);
	}
	
	for(i=1;i<=n;++i)
	{
		for(j=1;j<=n;++j)
			g<<c[i][j]<<" ";
		g<<"\n";
	}
	return 0;
}