Pagini recente » Cod sursa (job #2305704) | Cod sursa (job #826423) | Cod sursa (job #1823266) | Cod sursa (job #599405) | Cod sursa (job #2763998)
#include <iostream>
#include <fstream>
class Solution {
public:
static constexpr size_t MaxNodesNum = 100;
Solution& ReadDataFrom(const char *filePath) {
std::ifstream fin(filePath);
fin >> m_NodesNum;
for (size_t i = 0; i < m_NodesNum; i++) {
for (size_t j = 0; j < m_NodesNum; j++) {
fin >> m_Matrix[i][j];
}
}
fin.close();
return *this;
}
Solution& Compute() {
for (size_t k = 0; k < m_NodesNum; k++) {
for (size_t i = 0; i < m_NodesNum; i++) {
if (!m_Matrix[i][k])
continue;
for (size_t j = 0; j < m_NodesNum; j++) {
if (!m_Matrix[k][j] || i == j)
continue;
if (m_Matrix[i][k] + m_Matrix[k][j] < m_Matrix[i][j] || !m_Matrix[i][j])
m_Matrix[i][j] = m_Matrix[i][k] + m_Matrix[k][j];
}
}
}
return *this;
}
Solution& WriteDataTo(const char *filePath) {
std::ofstream fout(filePath);
for (size_t i = 0; i < m_NodesNum; i++) {
for (size_t j = 0; j < m_NodesNum; j++) {
fout << m_Matrix[i][j] << " ";
}
fout << std::endl;
}
fout.close();
return *this;
}
private:
size_t m_NodesNum;
int m_Matrix[MaxNodesNum][MaxNodesNum];
};
int main() {
Solution().ReadDataFrom("royfloyd.in").Compute().WriteDataTo("royfloyd.out");
return 0;
}