输入格式: 第一行包含两个整数n和m,n为关系网中的人数。 编号从1至n,刘老板是第1位,校长是第n位。M表示刘老板的关系网中有M个关系。(3 <n= 30, 3<=m <=1000) 接下来有m行。每行包含三个整数A、B和C,意思是A和B之间存在关系,如果A向B或B向A求助,刘老板将支付C元。 输出格式: 在你尽了最大努力后,输出Boss Liu要花的最少的钱。如果Boss Liu不能把他的孩子送到大学,就打印“Fail”。c++使用数组模拟,初始化用循环
时间: 2024-03-12 21:43:35 浏览: 15
以下是使用数组模拟且初始化用循环的C++代码实现:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int N = 35, INF = 0x3f3f3f3f;
int n, m, dis[N], vis[N], cnt[N], g[N][N];
bool spfa() {
memset(dis, 0x3f, sizeof(dis));
memset(cnt, 0, sizeof(cnt));
memset(vis, 0, sizeof(vis));
dis[1] = 0, vis[1] = true;
cnt[1]++;
for (int k = 0; k < n; k++) {
bool flag = false;
for (int u = 1; u <= n; u++) {
for (int v = 1; v <= n; v++) {
if (g[u][v] != INF && dis[v] > dis[u] + g[u][v]) {
dis[v] = dis[u] + g[u][v];
flag = true;
if (!vis[v]) {
vis[v] = true;
cnt[v]++;
if (cnt[v] >= n)
return false;
}
}
}
}
if (!flag)
break;
}
return dis[n] != INF;
}
int main() {
memset(g, 0x3f, sizeof(g));
cin >> n >> m;
for (int i = 1; i <= n; i++)
g[i][i] = 0;
while (m--) {
int u, v, w;
cin >> u >> v >> w;
g[u][v] = g[v][u] = w;
}
if (!spfa())
cout << "Fail" << endl;
else
cout << dis[n] << endl;
return 0;
}
```