用c语言写从标准输入读入数据。 输入的第一行包括三个正整数 N 、M 、K。表示一共有 N 座城镇,需要建造 M 条 输电线路,每座城镇都提供了 K 个变电站候选地址。 接下来输入 N 行,每行表示一个城镇。每行包含 K 个整数,表示该城镇不同候选 地址的变电站造价。 接下来 M 行,每行表示一条输电线路,包含 K2 + 2 个整数。前两个整数表示该输 电线路两端的城镇,范围是 [0, N )。第三个整数开始是大小为 K × K 的矩阵 T 的行主 序存储形式。Tij 表示当输电线路的第一个端点选择候选地址 i,第二个端点选择候选地 址 j 时的线路造价。输出到标准输出。 输出包含一行,这一行有一个整数,表示电网的最低总造价。
时间: 2024-02-13 19:06:30 浏览: 59
可以使用以下代码从标准输入读入数据并输出结果:
```c
#include <stdio.h>
#define MAX_N 1000
#define MAX_K 10
int N, M, K;
int cost[MAX_N][MAX_K];
int T[MAX_K][MAX_K][MAX_K][MAX_K];
int main() {
// 读入 N、M、K
scanf("%d %d %d", &N, &M, &K);
// 读入每个城镇的变电站造价
for (int i = 0; i < N; i++) {
for (int j = 0; j < K; j++) {
scanf("%d", &cost[i][j]);
}
}
// 读入每条输电线路的造价矩阵
for (int i = 0; i < M; i++) {
int u, v;
scanf("%d %d", &u, &v);
for (int j = 0; j < K; j++) {
for (int k = 0; k < K; k++) {
scanf("%d", &T[u][v][j][k]);
}
}
}
// 动态规划计算最低总造价
int dp[MAX_N][MAX_K];
for (int i = 0; i < N; i++) {
for (int j = 0; j < K; j++) {
dp[i][j] = cost[i][j];
}
}
for (int t = 0; t < M; t++) {
int u, v;
scanf("%d %d", &u, &v);
for (int j = 0; j < K; j++) {
for (int k = 0; k < K; k++) {
int min_cost = dp[u][j] + dp[v][k] + T[u][v][j][k];
if (min_cost < dp[u][j]) {
dp[u][j] = min_cost;
}
if (min_cost < dp[v][k]) {
dp[v][k] = min_cost;
}
}
}
}
// 输出最低总造价
int ans = dp[0][0];
for (int j = 0; j < K; j++) {
if (dp[0][j] < ans) {
ans = dp[0][j];
}
}
printf("%d\n", ans);
return 0;
}
```
阅读全文