C语言——Prim算法实现最小生成树
来源:互联网 发布:mac求生之路2附加战役 编辑:程序博客网 时间:2024/05/20 18:02
详细C++版本的Prim实现,
可以参考:https://www.61mon.com/index.php/archives/199/comment-page-2#comments
也可参考:http://blog.csdn.net/yeruby/article/details/38615045
今天刚接触Prim算法,参考网上大神们的代码,于是重温了c语言并进行了语言改写..,
printf("%d---%d\n",i,path[i]); 是printf("%d",i);printf("---");printf("%d\n",path[i]);的优化..许久不写c概念有点模糊了...
在此重温一下c语言的输入与输出:
常用的类型输出:
%d 整型
%f 实型
%e 实型(科学计数法)
%c 字符型
%u 无符号整型
------------------------------------
输入函数scanf:
格式: scanf(“格式控制串”,地址表)
功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束
返值:正常,返回输入数据个数
例 scanf(“%4d%2d%2d”,&yy,&mm,&dd);
输入 19991015
则1999->yy,10 ->mm,15 ->dd
例 scanf(“%2d%*3d%2d”,&a,&b);
输入 1234567
则12->a, 67->b
例 scanf(“%3c%2c”,&c1,&c2);
输入 abcde ¿
则‘a’Þc1,‘d’ Þc2
/*Prim算法实现无向图的最小二叉树的生成(邻接矩阵存储)*/ #include<stdio.h>#include<stdlib.h>#define MAX 10000int edge_num; //总边数int vertex_num; //顶点总数int sum; //最小生成树的边权之和 int s; //指定的最小生成树的起点int matrix[100][100]; //定义邻接矩阵bool visited[100]; //定义标记数组int l_cost[100]; //定义边的权值int path[100]; //记录最小生成树的路径void Prim(int s){int min; //权值最小int min_index; //权值最小的下标sum=0; //初始化权和为0 visited[s]=true; //标记顶点 for(int i=0;i<vertex_num;i++){ l_cost[i]=matrix[s][i]; //遍历数据,初始化起点s的各邻接边权值 path[i]=s; //初始化相应从起点到i点的路径 } for(int i=1;i<vertex_num;i++){min=MAX;for(int j=0;j<vertex_num;j++){ //找出权值最小 if(visited[j]==false && l_cost[j]<min){min=l_cost[j]; //min=最小边权值 min_index=j; //记录相应的边终点j }}visited[min_index]=true; //标记找出的结点sum+=l_cost[min_index]; //更新生成树的权和,加上新找到的结点的边权 for(int j=0;j<vertex_num;j++){ //利用找到的最小下标更新l_cost数组 if(visited[j]==false && matrix[min_index][j]<l_cost[j]){l_cost[j]=matrix[min_index][j];path[j]=min_index;}} }} int main(){int u,v,w;printf("请输入图的顶点数目(不大于100):");scanf("%d",&vertex_num);printf("请输入边数:");scanf("%d",&edge_num);for(int i=0;i<vertex_num;i++){for(int j=0;j<vertex_num;j++){matrix[i][j]=MAX; //初始化matrix数组(邻接矩阵存储) }}printf("请输入边的信息(起点,终点,边长):\n"); for(int i=0;i<edge_num;i++){ //存入各边权信息进邻接矩阵 scanf("%d%d%d",&u,&v,&w); matrix[u][v]=w; matrix[v][u]=w; }printf("请输入起点(<%d,&vertex_num):");scanf("%d",&s);Prim(s);printf("最小生成树的边权和为:%d\n",sum);printf("最小生成树的路径为:\n");for(int i=0;i<vertex_num;i++){if(i!=s){printf("%d---%d\n",i,path[i]);}} return 0;}
- C语言——Prim算法实现最小生成树
- 最小生成树—— Prim算法 ▪ Kruskal算法C语言实现
- 最小生成树Prim算法朴素版 C语言实现
- 最小生成树Prim算法朴素版 C语言实现
- C语言实现图的Prim最小生成树算法
- 最小生成树Prim算法朴素版 C语言实现
- 最小生成树Prim算法C语言
- 数据结构与C语言实现(十一)——图(下):最小生成树与Prim与Kruskal算法
- 最小生成树问题中Kruskal算法和Prim算法的C语言实现
- 最小生成树--prim算法的c语言描述
- C语言最小生成树prim算法(USACO3.1)
- C语言-数据结构-prim算法求最小生成树
- c语言:最小生成树之Prim算法
- 最小生成树——prim算法实现
- 图邻接矩阵存储 最小生成树 prim普里姆算法 C语言实现
- 数据结构之---C语言实现最小生成树之prim(普里姆)算法
- 数据结构(C实现)------- 最小生成树之Prim算法
- 最小生成树——prim算法
- Mac下my eclipse
- 监管禁新开贷款公司,审批被拒后想买拍照竟需6千万
- openCV学习笔记(二)---openCV系列基本操作
- LeetCode--Excel Sheet Column Number(Excel表格的列名转数字)Python
- 指针
- C语言——Prim算法实现最小生成树
- 读取web项目web-inf目录下的jdbc.properties文件
- Python初探
- sql
- 怎么安装send2trash模块
- BZOJ 2557: [Poi2011]Programming Contest 匈牙利算法
- python 图形统计
- 对象或库文件 "xxx.lib" 是使用比创建其他对象所用编译器旧的编译器创建的;请重新生成旧的对象和库
- 【Python】给列表添加删除元素的方法