最小生成树Prim算法模板
2017-07-26 19:34
239 查看
题目地址:
http://poj.org/problem?id=1251该题是个模板题,所以直接拿来做模板了。
该代码是AC代码。代码:
#include <iostream> #include<cstring> #include<cstdio> #include<cmath> #include<cstdlib> #define MAX 27 //图的规模 #define INF 99999999 //定义无穷大 using namespace std; int N; //节点的数目N //此外,在这里可能会有路径的数目M int map[MAX][MAX]; //邻接表 int micost[MAX]; //到上一个点的最小路径 int vis[MAX]; //记录该点有没有加入最小生成树中 void Prim() { int i,j,v,Min; int ans; //最小生成树的总权值 //1是第一个加入该最小生成树的节点 for(i=1;i<=N;i++) { micost[i]=map[1][i]; vis[i]=0; }//初始化节点 //定义每个节点的micost为1到其他点的距离 micost[1]=0; vis[1]=1; //起点的上一个节点没有节点,所以为0 //定义起点已经加入了最小生成树 ans=0; //初始化最小生成树的权值为零 //注意在循环里起点不包含进去 //为了防止错误 //因为不包含起点所以循环要从i=2开始 for(i=2;i<=N;i++) { Min=INF; for(j=2;j<=N;j++) { if(!vis[j]&&Min>micost[j]) v=j,Min=micost[j]; }//找micost最小的节点并加入最小生成树 vis[v]=1; if(Min!=INF) ans=ans+Min; for(j=2;j<=N;j++) { if(!vis[j]&&micost[j]>map[v][j]) micost[j]=map[v][j]; }//更新节点 } cout<<ans<<endl; } int main() { int i,j,num,x,y,z; char a,b; while(cin>>N,N)//输入图的节点数,路径数,(一般情况下) { for(i=1;i<=N;i++) for(j=1;j<=N;j++) { if(i==j)map[i][j]=0; else map[i][j]=INF; }//初始化邻接表 for(i=1;i<N;i++) { cin>>a>>num; for(j=1;j<=num;j++){ cin>>b>>z; x=a-64; y=b-64; map[x][y]=map[y][x]=z; } }//输入图 Prim(); } return 0; }
相关文章推荐
- Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)
- 最小生成树之Prim算法(模板)
- 最小生成树(prim算法与kruskal算法)(模板)
- 最小生成树prim算法模板
- 最小生成树-Prim算法(模板)
- HDU1162-Eddy's picture-最小生成树(prim算法模板)
- 最小生成树Prim算法模板
- 求解最小生成树的算法 prim算法(附模板)
- 最小生成树(prim算法模板,选点,oj2144)
- 最小生成树Prim算法模板
- prim算法模板 (最小生成树)
- prim算法模板—最小生成树
- 最小生成树(prim算法)模板
- 图论——最小生成树Prim算法模板
- 【2144】图结构练习——最小生成树 (prim算法模板) (sdut)
- 最小生成树(prim算法模板)
- Prim算法模板(最小生成树)
- 【2144】图结构练习——最小生成树 (prim算法模板) (sdut)
- hdu1233最小生成树 prim算法模板
- POJ 2421 图的最小生成树 prim算法 模板代码的利用