fork download
  1. #include <iostream>
  2. #include <queue>
  3. using namespace std;
  4. int main() {
  5. // чтение исходных данных
  6. int n, v;
  7. cin >> n >> v;
  8. int M[n][n];
  9. for (int i = 0; i < n; i++) {
  10. for (int j = 0; j < n; j++) cin >> M[i][j];
  11. M[i][i] = -1;
  12. }
  13. queue <int> plan; // план посещения в виде очереди
  14. plan.push(--v); // мы нумеруем с 0, а не с 1
  15. M[v][v] = 0; // отмечаем, что эта вершина уже заносилась в план
  16. while (!plan.empty()) {
  17. v = plan.front(); // посещаем следующую по плану вершину
  18. plan.pop(); // удаляем ее из плана посещения
  19. for (int u = 0; u < n; u++) // перебираем соседние с ней
  20. if (M[v][u] == 1 and M[u][u] == -1) { // если новая, то
  21. plan.push(u); // добавляем ее в план
  22. M[u][u] = M[v][v] + 1; // путь на 1 шаг длиннее
  23. }
  24. }
  25. for (int u = 0; u < n; u++) cout << M[u][u] << " ";
  26. }
Success #stdin #stdout 0s 4388KB
stdin
5 4
1 0 1 0 0
1 1 1 1 0
1 1 0 1 0
1 1 1 1 1
1 0 1 0 1
stdout
1 1 1 0 1