|
|
|
@ -40,15 +40,11 @@ int main() {
|
|
|
|
|
for (int j = i + 1; j < k; j++)
|
|
|
|
|
if (g[i][k] + g[k][j] < ans - dis[i][j]) { // 减法防止爆INT
|
|
|
|
|
ans = dis[i][j] + g[i][k] + g[k][j];
|
|
|
|
|
// 找到更小的环,需要记录路径,并且要求: 最小环的所有节点(按顺序输出)
|
|
|
|
|
// 顺序
|
|
|
|
|
// 1. 上面的i,j枚举逻辑是j>i,所以i是第一个
|
|
|
|
|
// 2. i->j 中间的路线不明,需要用get_path进行查询出i->j的最短路径怎么走,当然,也是在<k的范围内的
|
|
|
|
|
// 3. 记录j
|
|
|
|
|
// 4. 记录k
|
|
|
|
|
path.clear();
|
|
|
|
|
path.push_back(i);
|
|
|
|
|
get_path(i, j); // i是怎么到达j的?就是问dis[i][j]是怎么获取到的,这是在求最短路径过程中的一个路径记录问题
|
|
|
|
|
// 包含最小环的所有节点(按顺序输出)
|
|
|
|
|
// 找到长度更小的环,需要记录路径,并且要求: 最小环的所有节点(按顺序输出)
|
|
|
|
|
path.clear(); // 每次找到新的最小环,那path就是为最小的环而准备的,以前的都作废掉
|
|
|
|
|
path.push_back(i); // 序号:i < j < k
|
|
|
|
|
get_path(i, j);
|
|
|
|
|
path.push_back(j);
|
|
|
|
|
path.push_back(k);
|
|
|
|
|
}
|
|
|
|
|