1 条题解
-
0
C :
#include<stdio.h> #include<stdlib.h> #include<string.h> int g[105][105]; //邻接矩阵 int minn[105]; //minn[i]存放顶点i与生成树相连的最小边权 int start[105]; //start[i]存放与minn[i]的顶点i相关联的顶点 int u[105]; //u[i]=1表示顶点i还未加入到生成树中,u[i]=0表示顶点i已加入到生成树中 int n,e,total; void prim(){ int i,j,k; memset(minn,0x7f,sizeof(minn));//初始化为maxint minn[1] = 0; start[1]=0; //开始的顶点 memset(u,1,sizeof(u)); //初始化为1,表示所有顶点未加入生成树 for (i = 1; i <= n; i++) //需加入n个顶点 { k = 0; for (j = 1; j <= n; j++) //找一个与生成树相连的权值最小的顶点k if (u[j] && (minn[j] < minn[k])) k = j; u[k] = 0; //顶点k加入生成树 total=total+minn[k]; for (j = 1; j <= n; j++) //修改与k相连的所有边 if (u[j] &&(g[k][j]!=0) && (g[k][j] < minn[j])) { minn[j] = g[k][j]; start[j]=k; } } } int main(){ int i,j,w,t=0; scanf("%d%d",&n,&e); while (e>0) { scanf("%d%d%d",&i,&j,&w); g[i][j]=g[j][i]=w; t=t+w; e--; } prim(); printf("%d\n",t-total); return 0; }
- 1
信息
- ID
- 1234
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者