Кратчайшее расстояние
Это нормально что таблица смежности не симметрична относительно главной диагонали?
>>Это нормально что таблица смежности не симметрична относительно главной диагонали?
А ничего , что граф ориентированный ???
В условии прямо сказано, что "На главной диагонали матрицы стоят нули". В некоторых тестах это не так. Желательно было бы исправить тесты или условие.
include <iostream>
include <vector>
include <climits>
int mind(std::vector<int> &dist, std::vector<bool> &visited, int n) { int min = INT_MAX; int ind = -1; for(int i = 1; i <= n; i++) { if(!visited[i] && dist[i] < min) { min = dist[i]; ind = i; } } return ind; } void deik(std::vector<std::vector<int>> graph, int s, int n) { std::vector<int> dist(n + 1, INT_MAX); std::vector<bool> visited(n + 1, false);
dist[s] = 0;
for(int i = 1; i <= n; i++)
{
int u = mind(dist, visited, n);
if(u == -1)
{
break;
}
visited[u] = true;
for(int j = 1; j <= n; j++)
{
if(!visited[j] && graph[u][j] != 0 && dist[u] + graph[u][j] < dist[j])
{
dist[j] = dist[u] + graph[u][j];
}
}
}
for(int i = 1; i <= n; i++)
{
std::cout << (dist[i] != INT_MAX ? dist[i] : -1) << " ";
}
} int main() { int n; int s; std::cin >> n >> s; std::vector<std::vector<int>> graph(n + 1, std::vector<int> (n + 1)); for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { std::cin >> graph[i][j]; } } deik(graph, s, n); }