Pagini recente » Cod sursa (job #1554434) | Cod sursa (job #405307) | Cod sursa (job #335224) | Monitorul de evaluare | Cod sursa (job #2175732)
#include <bits/stdc++.h>
using namespace std;
ifstream in("royfloyd.in");
ofstream out("royfloyd.out");
int n, m, visited[50005], x, y, v, start, i, j, inf = 18000000000, p;
struct e
{
int number_of_neighbourghs;
vector < int > neighbourghs;
vector < int > price;
}vertices[50005];
queue < int > Q;
void outData()
{
for(int q = 1; q <= n; q++)
cout << visited[q] << " ";
cout << endl;
}
void run_algorithm()
{
start = p;
visited[start] = 0;
Q.push(start);
while(!Q.empty())
{
x = Q.front();
Q.pop();
for(i = 0; i < vertices[x].neighbourghs.size(); i++)
{
if(visited[x] + vertices[x].price[i] < visited[vertices[x].neighbourghs[i]])
{
visited[vertices[x].neighbourghs[i]] = visited[x] + vertices[x].price[i];
Q.push(vertices[x].neighbourghs[i]);
}
}
///outData();
}
}
int main()
{
in >> n;
for(i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
in >> v;
if(v != 0)
{
vertices[i].number_of_neighbourghs++;
vertices[i].neighbourghs.push_back(j);
vertices[i].price.push_back(v);
}
}
}
for(p = 1; p <= n; p++)
{
for(i = 1; i <= n; i++)
visited[i] = inf;
run_algorithm();
for(int i = 1; i <= n; i++)
if(visited[i] == inf)
out << "0 ";
else
out << visited[i] << " ";
out <<"\n";
}
return 0;
}