ZOJ 1406 Jungle Roads (最小生成树)
2012-12-26 15:30
423 查看
一道很直观的最小生成树题目,我用Prim来做的
最小生成树有两种算法
Prim 算法 和 Kruskal 算法
其中个人感觉Prim比较简洁些,也很好理解,而 Kruskal算法还要引入并查集
Prim :采用贪心策略,先从顶点开始选取 与顶点相连的最短的边 连接一个新的未访问过的顶点
然后 更新已经访问顶点到其他顶点的最短距离 (松弛)
继续找 一条与 已经访问顶点相连的最短的边且该边连接一个未访问过的顶点,松弛,不断重复上述操作
直到所有顶点都已经访问过为止.
最小生成树有两种算法
Prim 算法 和 Kruskal 算法
其中个人感觉Prim比较简洁些,也很好理解,而 Kruskal算法还要引入并查集
Prim :采用贪心策略,先从顶点开始选取 与顶点相连的最短的边 连接一个新的未访问过的顶点
然后 更新已经访问顶点到其他顶点的最短距离 (松弛)
继续找 一条与 已经访问顶点相连的最短的边且该边连接一个未访问过的顶点,松弛,不断重复上述操作
直到所有顶点都已经访问过为止.
#include<iostream> #include<cstring> #include<algorithm> #include<string> #include<vector> #include<cstdio> #include<limits.h> using namespace std; int n; int Map[27][27]; int Leastcost (); int letter_to_num(char ch); int main() { int i,i2; int k; char ch; int cost; while (scanf ("%d%*c",&n)!=EOF && n) { memset(Map,-1,sizeof(Map)); for (i=0;i<n-1;i++) { scanf("%*c %d",&k); for (i2=0;i2<k;i2++) { scanf (" %c %d",&ch,&cost); Map[i][letter_to_num(ch)]=cost; Map[letter_to_num(ch)][i]=cost; } scanf("%*c"); } printf("%d\n",Leastcost()); } return 0; } int letter_to_num(char ch) // 0-26 { return (ch-65); } int Leastcost () { int Visted[27]={0}; int Least[27]; int sum=0; int Min; int i,i2; int pos; for (i=0;i<n;i++) Least[i]=INT_MAX; Least[0]=0; for (i=0;i<n;i++) { Min=INT_MAX; for (i2=0;i2<n;i2++) if (!Visted[i2]&&Min>Least[i2]) { Min=Least[i2]; pos=i2; } Visted[pos]=1; sum+=Least[pos]; for (i2=0;i2<n;i2++) { if (Map[pos][i2]==-1) continue; if (Map[pos][i2]<Least[i2]) Least[i2]=Map[pos][i2]; } } return sum; }
相关文章推荐
- zoj 1406 Jungle Roads(最小生成树))
- ZOJ 1406 Jungle Roads (最小生成树)
- zoj 1406 Jungle Roads(最小生成树)
- ZOJ 1406 POJ 1251 Jungle Roads 丛林中的道路,最小生成树,Kruskal算法
- (最小生成树)ZOJ 1406 Jungle Roads
- zoj 1406 Jungle Roads 最小生成树
- zoj1406----------Jungle Roads 最小生成树 prim
- POJ1251 || ZOJ1406 kruskal求最小生成树
- zoj 1406 最小生成树
- zoj 1406 最小生成树 kruskal 和 prim用法
- zoj 1203 swordfish 最小生成树
- ZOJ 【2108】Agri-Net(最小生成树)模拟生成树&普利姆算法
- Jungle roads (zoj 1406 hdoj 1301)
- zoj 1203求最小生成树的权值之和(kruskal算法实现)
- ZOJ 3204 Connect them(最小生成树之Krusal 输出字典序最小的)
- zoj1372----------------Networking 最小生成树 kruskal算法
- zoj 1406 jungle roads
- ZOJ 1406 Jungle Roads (kruskal)
- ZOJ 1584:Sunny Cup 2003 - Preliminary Round(最小生成树&&prim)
- zoj1203_Swordfish(最小生成树)