poj1251
来源:互联网 发布:java 中声明short定义 编辑:程序博客网 时间:2024/05/27 12:22
题意:给你几个点 ,然后下一行就是给你其中一个点 然后跟着一个值,这个值表示有几个点和这个点之间有路径可走,让你求最小生成树,prime算法,就是输入的时候有一些麻烦,是字符ABCD之类的 我们要把字符先转换成整形再去做,字符串操作中很多我也喜欢这么做
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<iostream>
#include<algorithm>
#define maxn 0x3f3f3f3f
using namespace std;
int n,m1,m2;
char a1[10],a2[2];
int map[30][30],d[30];
bool vis[30];
void prime()
{
for(int i = 0; i < n; i ++)
{
d[i] = map[0][i];
vis[i] = 0;
}
for(int i = 0; i < n; i ++)
{
int minx = maxn;
int now;
for(int j = 0; j < n; j ++)
{
if(!vis[j] && minx > d[j])
{
now = j;
minx = d[j];
}
}
vis[now] = 1;
for(int k = 0; k < n; k ++)
{
if(!vis[k] && d[k] > map[now][k])
d[k] = map[now][k];
}
}
for(int i = 1; i < n; i ++)
d[0] += d[i];
printf("%d\n",d[0]);
}
int main()
{
while(~scanf("%d",&n)&&n)
{
for(int i = 0; i < n; i ++)
for(int j = 0; j < n; j ++)
{
if(i == j)
map[i][j] = 0;
else map[i][j] = maxn;
}
for(int i = 1; i < n; i ++)
{
scanf("%s%d",a1,&m1);
for(int j = 0; j < m1; j ++)
{
scanf("%s%d",a2,&m2);
map[a1[0]- 'A'][a2[0] - 'A'] = map[a2[0]- 'A'][a1[0] - 'A'] = m2;
}
}
prime();
}
return 0;
}
0 0
- poj1251
- poj1251
- poj1251
- poj1251
- poj1251
- poj1251
- poj1251
- POJ1251 MST
- poj1251(prim)
- poj1251--Kruskal
- POJ1251 Kruskal
- POJ1251题的代码
- 第一次Prim,POJ1251
- POJ1251解题报告
- poj1251 Jungle Roads
- poj1251 - Jungle Roads
- poj1251-Kruskal算法
- 最小生成树--poj1251
- 深入探究Swift数组背后的协议、方法、拓展
- socketpair理解
- POJ2362 DFS+剪枝
- 智力拼图问题–关于回溯和并行:单线到多线程再到GPU编程的进阶(一)
- Linux_NFS/Samba服务器
- poj1251
- Zynq高速串行CMOS接口设计与实现
- 在c++代码中执行bat文件
- freopen和fopen的在ACM竞赛中的简单使用
- Qt之国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)
- [leetcode]Best Time to Buy and Sell Stock I&II
- web学习-瀑布流布局(2)
- Sublime Text2一些常用快捷键
- 【HDU1754】I HATE IT,线段树练习