Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <deque>
- #include <iostream>
- #include <string>
- #include <queue>
- #include <utility>
- #include <vector>
- using namespace std;
- struct Graph {
- vector<vector<int>> graph;
- vector<bool> visited;
- vector<int> distances;
- queue<int> que;
- size_t start;
- size_t finish;
- size_t dist;
- explicit Graph(int n) : graph(n, vector<int>(n, 0)),
- visited(n, false),
- distances(n, 0),
- start(0),
- finish(0),
- dist(0) {
- visited[start] = true;
- que.push(start);
- }
- void bfs();
- };
- void Graph::bfs() {
- while (!que.empty()) {
- int item = que.front();
- que.pop();
- for (size_t neig = 0; neig < graph.size(); ++neig) {
- if (graph[item][neig] == 1) {
- if (!visited[neig]) {
- visited[neig] = true;
- distances[neig] = distances[item] + 1;
- que.push(neig);
- }
- }
- }
- }
- }
- int main() {
- int N;
- cin >> N;
- Graph g(N);
- for (int i = 0; i < N; ++i) {
- for (int j = 0; j < N; ++j) {
- int cell;
- cin >> cell;
- g.graph[i][j] = cell;
- }
- }
- int start;
- cin >> start;
- g.start = start - 1;
- int finish;
- cin >> finish;
- g.finish = finish - 1;
- g.bfs();
- if (g.distances[g.finish] == 0) {
- cout << -1;
- } else {
- cout << g.distances[g.finish];
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement