diff --git a/CSP-Training/5/1-dijkstra.cpp b/CSP-Training/5/1-dijkstra.cpp index d771e29..ee8ce85 100644 --- a/CSP-Training/5/1-dijkstra.cpp +++ b/CSP-Training/5/1-dijkstra.cpp @@ -6,13 +6,52 @@ using namespace std; int graph[10000][10000]; bool Greater(const vector &a, vector b, int n); //先把n推入vector b中 -int *Dijkstra(int source, int n) +void Dijkstra(int source, int n); +int main() +{ + int n, m, s, source, dest, weight; + scanf("%d %d", &n, &m); + s = 1; + for (int i = 0; i < n; i++) + { + for (int j = 0; j < n; j++) + { + graph[i][j] = (1 << 30) - 1; + } + graph[i][i] = 0; + } + for (int i = 0; i < m; i++) + { + scanf("%d %d %d", &source, &dest, &weight); + if (graph[source - 1][dest - 1] > weight) + { + graph[source - 1][dest - 1] = weight; + graph[dest - 1][source - 1] = weight; + } + } + Dijkstra(s - 1, n); + return 0; +} +bool Greater(const vector &a, vector b, int n) +{ + b.push_back(n); + int minLen = a.size() < b.size() ? a.size() : b.size(); + for (int i = 0; i < minLen; i++) + { + if (a[i] != b[i]) + { + return a[i] > b[i]; + } + } + return false; +} +void Dijkstra(int source, int n) { int *dist = new int[n + 1], mark[n + 1]; vector routeStr[n]; for (int i = 0; i < n + 1; i++) { - dist[i] = 1 << 31 - 1; + dist[i] = (1 << 30) - 1; mark[i] = 0; } routeStr[0].push_back(1); @@ -43,52 +82,14 @@ int *Dijkstra(int source, int n) } } } - if (dist[n - 1] == 1 << 31 - 1) + if (dist[n - 1] == (1 << 30) - 1) { printf("-1"); - return dist; + return; } for (vector::iterator i = routeStr[n - 1].begin(); i != routeStr[n - 1].end(); i++) { printf("%d ", *i); } - return dist; -} -int main() -{ - int n, m, s, source, dest, weight; - scanf("%d %d", &n, &m); - s = 1; - for (int i = 0; i < n; i++) - { - for (int j = 0; j < n; j++) - { - graph[i][j] = 1 << 31 - 1; - } - graph[i][i] = 0; - } - for (int i = 0; i < m; i++) - { - scanf("%d %d %d", &source, &dest, &weight); - if (graph[source - 1][dest - 1] > weight) - { - graph[source - 1][dest - 1] = weight; - graph[dest - 1][source - 1] = weight; - } - } - int *dist = Dijkstra(s - 1, n); - return 0; -} -bool Greater(const vector &a, vector b, int n) -{ - b.push_back(n); - int minLen = a.size() < b.size() ? a.size() : b.size(); - for (int i = 0; i < minLen; i++) - { - if (a[i] != b[i]) - { - return a[i] > b[i]; - } - } - return false; + return; } \ No newline at end of file