Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- int main() {
- long N = 0;
- long M = 0;
- cin >> N >> M;
- vector<long> tmp(N,0);
- vector<vector<long>> verges(M, tmp);
- long v1 = 0;
- long v2 = 0;
- for (long i = 0; i < M; i++) {
- cin >> v1 >> v2;
- verges[v1][v2] = 1;
- verges[v2][v1] = 1;
- }
- cin >> v1 >> v2;
- vector<bool> used (N);
- for (long i = 0; i < N; i++) {
- used[i] = false;
- }
- vector<long> dist (M);
- for (long i = 0; i < M; i++) {
- dist[i] = 400001;
- }
- dist[v1] = 0;
- long ind = v1;
- long min = 400001;
- long count = 0;
- do {
- for (long i = 0; i < N; i++) {
- if (dist[i] < min && !used[i]) {
- min = dist[i];
- ind = i;
- }
- }
- if (ind != 400001) {
- for (long i = 0; i < N; i++) {
- if (verges[ind][i] != 0) {
- long temp = min + 1;
- if (temp < dist[i]) {
- dist[i] = temp;
- count = 0;
- }
- if (temp == dist[i]) {
- count++;
- }
- }
- }
- used[ind] = true;
- }
- } while (ind != v2);
- if (min == 400001) {
- cout << -1 << endl;
- }
- else {
- cout << min << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement