关于prim算法与程序运行不了的问题

丶丶路遥 2017-07-10 10:09:18

//普里姆算法,用来找出图中最小生成树
#include <stdio.h>

#define MAXVEX 9
#define INFINITY 65535

typedef char VertexType; //顶点类型
typedef int EdgeType; //权值
typedef struct{
VertexType vexs[MAXVEX]; //定点表
EdgeType arc[MAXVEX][MAXVEX]; //边矩阵,存放权值
int numVertexes,numEdges; //顶点数,权值数
}MGraph;

//首先构造邻阶矩阵
int createMGraph(MGraph *G){
int i,j;
printf("请输入顶点数和边数\n");
scanf("%d,%d",&G->numVertexes,&G->numEdges);
printf("请输入顶点的值\n");
for(i=0;i<G->numVertexes;i++){
scanf(&G->vexs[i]);
}
//边矩阵初始化
for(i=0;i<G->numVertexes;i++){
for(j=0;j<G->numVertexes;j++){
G->arc[i][j]=INFINITY; //邻接矩阵初始化
}
}

//用户输入权值
for(i=0;i<G->numVertexes;i++){
for(j=0;j<G->numVertexes;j++){
printf("输入边(%d,%d)上的权值\n",i,j);
scanf("%d",&G->arc[i][j]);
G->arc[j][i] = G->arc[i][j]; //因为是无向图,所以为对称矩阵
}
}
return 0;
}

//获取临时权值数组中的最小值
int getMin(int lowcost[],MGraph *G){
int min,minSign,i;
min = INFINITY; //初始化min为正无穷,这里表示整形的最大值65536
for(i=0;i<G->numVertexes;i++){ //由于数组的长度是100,这里实际矩阵的长度没有这么长,所以要用实现设定的numVertexes
//循环变量矩阵第一行的全部权值
if(lowcost[i] != 0 && lowcost[i] < min){
min = lowcost[i];
minSign = i;
}
}
return minSign;
}

//prim算法实现最小生成树
void Prim_MinSanTree(MGraph *G){
int i,minSign,j; //为某一个顶点,在矩阵中代表某行
int node[MAXVEX]; //保存定点下标
int lowcost[MAXVEX]; //保存权值

//初始化操作
for(i=1;i<G->numVertexes;i++){ //初始化node数组和把矩阵第一行存入到lowcost
lowcost[i] = G->arc[0][i];
node[i] = 0;
}

for(i = 1; i < G->numVertexes;i++){
//找出数组中的最小值的下标
minSign = getMin(lowcost,G);

//打印当前顶点边权值最小的边
printf("(%d,%d)",node[minSign],minSign);
lowcost[minSign] = 0; //将当前权值设置为0,下次不予判断
for(j=1;j<G->numVertexes;j++){
if(lowcost[j] != 0 && G->arc[minSign][j] < lowcost[j]){
lowcost[j] = G->arc[minSign][j];
node[j] = minSign;
}
}
}
}

int main(){
MGraph *G = NULL;
printf("---------------------------程序开始运行----------------------------\n");
printf("---------------------------开始构造矩阵----------------------------\n");
createMGraph(G);
return 0;
}

...全文
396 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何具体存储。例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,使得计算机可以执行以求解问题。 算法特性:包括输入、输出、有穷性、确定性和可行性。即一个有效的算法必须能在有限步骤内结束,并且对于给定的输入产生唯一的确定输出。 算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法,分支限界法等。 算法分析:通过数学方法分析算法的时间复杂度(运行时间随数据规模增长的速度)和空间复杂度(所需内存大小)来评估其效率。 学习算法与数据结构不仅有助于理解程序的内部工作原理,更能帮助开发人员编写出高效、稳定和易于维护的软件系统。
算法与数据结构它们分别涵盖了以下主要内容: 数据结构(Data Structures): 逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何具体存储。例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,使得计算机可以执行以求解问题。 算法特性:包括输入、输出、有穷性、确定性和可行性。即一个有效的算法必须能在有限步骤内结束,并且对于给定的输入产生唯一的确定输出。 算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法,分支限界法等。 算法分析:通过数学方法分析算法的时间复杂度(运行时间随数据规模增长的速度)和空间复杂度(所需内存大小)来评估其效率。 学习算法与数据结构不仅有助于理解程序的内部工作原理,更能帮助开发人员编写出高效、稳定和易于维护的软件系统。

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧