poj 2485 Highways (最小生成树)
2013-02-26 20:01
453 查看
题目链接:http://poj.org/problem?id=2485
题目大意:给出1~N的城镇,现在需要修一条高速公路,使得任意城镇可以互相来往; 转换之后就成了求最小生成树中最长的边
解题思路:input的是邻接矩阵,直接用 prim 算法
代码:
注:原创文章,转载请注明出处
题目大意:给出1~N的城镇,现在需要修一条高速公路,使得任意城镇可以互相来往; 转换之后就成了求最小生成树中最长的边
解题思路:input的是邻接矩阵,直接用 prim 算法
代码:
#include <stdio.h> #include <string.h> #define MAX 501 #define INF 0x3f3f3f3f int t,n,nears[MAX],edge[MAX][MAX]; // near存储连接i点最短的边是near[i] int Prim (int v0) //从v0点开始 prim { int i,k,temp,v,dist[MAX]={0}; for(i=0;i<n;i++) { nears[i]=edge[v0][i]; //初始化 near[] } nears[v0]=0; dist[v0]=1; for(k=0;k<n-1;k++) //n-1个点 { v=-1; temp=INF; for(i=0;i<n;i++) { if(!dist[i]&&temp>nears[i]) //此点必须要没有加入到集合里面 { temp=nears[i]; v=i; } } dist[v]=1; for(i=0;i<n;i++) { if(!dist[i]&&i!=v&&edge[v][i]!=0&&edge[v][i]<nears[i]) //***注意这里,和Dijkstra的不同处 { nears[i]=edge[v][i]; } } } temp=0; for(i=0;i<n;i++) //输出最长的那条边 { if(temp<nears[i]) temp=nears[i]; } return temp; }int main() { int i,j; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&edge[i][j]); printf("%d\n",Prim(0)); if(t!=0) printf("\n"); } return 0; }
注:原创文章,转载请注明出处
相关文章推荐
- POJ 2485:Highways:典型prim最小生成树(2)
- POJ 2485 Highways(最小生成树,树的最大权值边)
- POJ 2485 Highways 最小生成树 (Kruskal)
- POJ 2485 Highways【最小生成树最大权——简单模板】
- poj 2395 Out of Hay、2485 Highways(求最小生成树的最长边)
- poj 2485 Highways(最小生成树中求最大权值)
- poj 2485 Highways 最小生成树
- POJ 2485 Highways【最小生成树最大权——简单模板】
- POJ 2485 Highways 最小生成树 Kruskal && Prim
- POJ 2485 Highways 最小生成树 prim算法
- POJ 2485 Highways(最小生成树Prim算法)
- 最小生成树Kruskal算法【模板】 与 并查集 例题:简单 poj 2485 Highways
- poj 2485 Highways 最小生成树
- POJ 2485 Highways (最小生成树)
- POJ 一 2485 Highways(最小生成树)
- POJ训练计划2485_Highways(最小生成树)
- poj 2485 Highways(最小生成树 Prim)
- poj 2485 Highways prim最小生成树
- POJ 2485 Highways 最小生成树
- (kruscal12.3.5)POJ 2485 Highways(使用kruscal来计算最小生成树的最大边)