C++
有点小坑,所以记录一下
#include <bits/stdc++.h>
using namespace std;
const int N = 210;
int g[N][N];
int n, m, k;
int anscnt, ansid, anssum = 1e9;
vector<int> path;
int st[N];
int main() {
memset(g, 0x3f, sizeof g);
cin >> n >> m;
for (int i = 0; i < m; i++) {
int a, b, c;
cin >> a >> b >> c;
g[a][b] = c, g[b][a] = c;
}
cin >> k;
for (int p = 1; p <= k; p++) {
memset(st, 0, sizeof st);
int N;
cin >> N;
path.clear();
path.push_back(0);
for (int i = 0; i < N; i++) {
int x;
cin >> x;
path.push_back(x);
st[x]++;
}
path.push_back(0);
if (N != n) continue;
for (int i = 1; i <= n; i++) // 每个地点只能打卡1次,必须为1
if (st[i] != 1) N--; // 巧减变量退出循环
if (N != n) continue;
int sum = 0;
bool flag = true;
for (int i = 0; i < path.size()-1; i++) {
if (g[path[i]][path[i+1]] == 0x3f3f3f3f) {
flag = false;
break;
}
sum += g[path[i]][path[i+1]];
}
if (flag) {
anscnt++;
if (sum < anssum) {
anssum = sum;
ansid = p;
}
}
}
cout << anscnt << endl;
cout << ansid << " " << anssum << endl;
return 0;
}
本文档展示了一个C++程序,用于解决给定网红点打卡路线的最短距离问题。程序读取地点之间的距离矩阵和打卡路径,通过检查路径的有效性和计算总距离来找出最佳路线。主要涉及图论和最短路径算法。
2245

被折叠的 条评论
为什么被折叠?



