最小生成树--九度1154[Kruskal]
来源:互联网 发布:外交官拉杆箱 知乎 编辑:程序博客网 时间:2024/05/22 23:14
题目[jungle Roads]: http://ac.jobdu.com/problem.php?pid=1154
思路:没什么特别,就是简单的kruskal算法实现,重点在数据的处理转换。
疑惑:实现的时候要读入单个字符,使用scanf(“%c”)总是出错,最后想到的解决办法是按字符串读入,再取其0位字符。 应该有正规的格式,暂时还没搜到!
#include<cstdio>#include<algorithm>#include<cmath>#define maxSize 100using namespace std;int tree[30]; //村子的根节点struct Road { int a, b; int len;}road[maxSize];int findRoot(int x) {//寻根 if (-1 == tree[x]) return x; else { int temp = findRoot(tree[x]); tree[x] = temp; return temp; }}bool cmp(Road ra, Road rb) {//比较 return ra.len < rb.len;}int main() { int n;//村子数 while (scanf("%d", &n) != EOF) { if (0 == n) break; for (int i = 1; i <= n; i++) {//初始化 tree[i] = -1; } int rnum = 0; //路的条数 for (int i = 1; i < n; i++) {//输入[注:是n-1行] char str_1[5]; int myNum, temp_len; scanf("%s", str_1); scanf("%d", &myNum); for (int j = 1; j <= myNum; j++) { char str_2[5]; scanf("%s", str_2); scanf("%d", &temp_len); road[++rnum].a = str_1[0] - 'A' + 1; road[rnum].b = str_2[0] - 'A' + 1; road[rnum].len = temp_len; }//for-j }//for-i sort(road + 1, road + rnum + 1, cmp);//小心序号 int sum = 0; for (int i = 1; i <= rnum; i++) { int a = findRoot(road[i].a); int b = findRoot(road[i].b); if (a != b) { tree[a] = b; sum += road[i].len; } } printf("%d\n", sum); }//while return 0;}
0 0
- 最小生成树--九度1154[Kruskal]
- 最小生成树--九度1017[Kruskal]
- 最小生成树--九度1144[Kruskal]
- //九度OJ教程71 kruskal求最小生成树。
- 九度OJ教程75 kruskal求最小生成树
- 图论(九)最小生成树-Kruskal算法
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树 kruskal
- kruskal 最小生成树
- 最小生成树-Kruskal
- 最小生成树kruskal
- 最小生成树---Kruskal
- Kruskal 最小生成树
- 最小生成树 Kruskal
- 最小生成树--Kruskal
- Kruskal 最小生成树
- 最小生成树-Kruskal
- 算法训练 Torry的困惑(基本型)
- 计算机程序的思维逻辑 (67)
- git stash命令的使用
- CentOS安装新版git——超简单
- JAVA
- 最小生成树--九度1154[Kruskal]
- Linux中常见操作1--查看与关闭进程
- 算法训练 Anagrams问题
- 文章标题
- 简单的springMVC登录拦截器
- Ubuntu14.04 Shadowsocks服务器安装
- SOJ 1011
- HibernateTransactionManager 和 hibernateTemplate的区别
- 命令行下编译Qt工程?