Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- class Graph {
- private:
- std::vector<std::vector<int>> data;
- public:
- Graph(size_t N);
- ~Graph(){}
- void AddEdge(size_t from, size_t to, int weight);
- void Floyd();
- };
- Graph::Graph(size_t N) {
- for (size_t i = 0; i < N; ++i) {
- std::vector<int> tmp(N, 0);
- data.push_back(tmp);
- }
- }
- void Graph::AddEdge(size_t from, size_t to, int weight) {
- data.at(from).at(to) = weight;
- }
- void Graph::Floyd() {
- for (size_t k = 0; k < data.size(); ++k)
- for (size_t i = 0; i < data.size(); ++i)
- for (size_t j = 0; j < data.size(); ++j)
- data.at(i).at(j) = (data.at(i).at(j) > data.at(i).at(k) + data.at(k).at(j)) ? data.at(i).at(k) + data.at(k).at(j) : data.at(i).at(j);
- for (size_t i = 0; i < data.size(); ++i) {
- for (size_t j = 0; j < data.size(); ++j)
- std::cout << data.at(i).at(j) << ' ';
- std::cout << std::endl;
- }
- }
- int main()
- {
- size_t N;
- std::cin >> N;
- Graph current{ N };
- for(size_t i = 0; i < N; ++i)
- for (size_t j = 0; j < N; ++j) {
- int weight;
- std::cin >> weight;
- current.AddEdge(i, j, weight);
- }
- current.Floyd();
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement