题目大意:给出一张图,两个顶点之间的边权有两种,分别计算两种边权下从起点到终点的最短路径。 仍然是常规的dijktra+dfs问题,但是要写两次。也可以把两个dijkstra写在一个函数里,这时要注意二维数组的形参是 int G[ ][MAXN] 或者 int (*G)[MAXN]。 AC代码: #include <iostream> #include <vector> #include <algorithm> #include <cstdio> using namespace std; const int MAXN = 510; const int INF = 0x7FFFFFFF; int G1[MAXN][MAXN]; int G2[MAXN][MAXN]; int d[MAXN]; bool visited[MAXN] = {false}; vector<vector<int>> pre1; vector<vector<int>> pre2; void dijktra(int s, int N, int G[][MAXN], vector<vector<int>> &pre) { fill(d, d + MAXN, INF); fill(visited, visited + MAXN, 0); d[s] = 0; for (int i = 0; i < N; ++i) {