首页 > 代码库 > poj 1258 Agri-Net 解题报告
poj 1258 Agri-Net 解题报告
题目链接:http://poj.org/problem?id=1258
题目意思:给出 n 个 farm,每个farm 之间通过一定数量的fiber 相连,问使得所有farm 直接或间接连通的 最少 fiber 数是多少。
赤裸裸的最小生成树,用prim做的。
有个地方写错,wa 了 几次。
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 const int farm_num = 10000 + 10; 6 const int INF = 1e9; 7 int farm[farm_num][farm_num]; 8 int dist[farm_num], vis[farm_num]; 9 int ans, N;10 11 void prim()12 {13 int k;14 for (int i = 1; i <= N; i++)15 {16 vis[i] = 0;17 dist[i] = INF;18 }19 // 假设从编号为 1 的farm 出发20 dist[1] = 0, ans = 0;21 for (int i = 1; i <= N; i++)22 {23 int tmp = INF;24 for (int j = 1; j <= N; j++)25 {26 if (!vis[j] && dist[j] < tmp)27 {28 tmp = dist[j];29 k = j;30 }31 }32 vis[k] = 1;33 ans += tmp;34 for (int j = 1; j <= N; j++)35 {36 if (!vis[j] && dist[j] > farm[k][j]) // 一开始将dist[j] > farm[k][j]直接写成farm[k][j]了= =37 dist[j] = farm[k][j];38 }39 }40 }41 42 int main()43 {44 while (scanf("%d", &N) != EOF)45 {46 for (int i = 1; i <= N; i++)47 {48 for (int j = 1; j <= N; j++)49 scanf("%d", &farm[i][j]);50 }51 prim();52 printf("%d\n", ans);53 }54 return 0;55 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。