无向图(使用邻接矩阵)
更新时间:2023-04-22 21:11:01 阅读量: 实用文档 文档下载
C语言数据结构实验,已经调试成功。直接复制即可运行。由于文库不支持C文件,所以将扩展名改为了TXT,可下载后直接将其改为C或cpp即可直接运行。
#include<stdio.h>
#include<stdlib.h>
#define MaxVertices 100 //假设包含100个顶点
#define MaxWeight 32767 //不邻接时为32767,但输出时用 "∞"
typedef struct //包含权的邻接矩阵的的定义
{int Vertices[MaxVertices]; //顶点信息的数组
int Edge[MaxVertices][MaxVertices]; //边的权信息的数组
int numV; //当前的顶点数
int numE; //当前的边数
}AdjMatrix;
void main()
{void CreateGraph(AdjMatrix*G);
void DispGraph(AdjMatrix G);
void Prim(AdjMatrix G); //最小生成树的普里姆算法;
AdjMatrix G;
CreateGraph(&G);
DispGraph(G);
Prim(G);
}
void CreateGraph(AdjMatrix*G) //图(带权)的产生函数(建立无(有)向图)
{int n,e,vi,vj,w,i,j;
printf("请输入图的顶点数和边数(以空格分隔):");
scanf("%d%d",&n,&e);
G->numV=n;G->numE=e;
for(i=0;i<n;i++) //对图进行初始化
for(j=0;j<n;j++)
{if(i==j)
G->Edge[i][j]=0;
else
G->Edge[i][j]=32767;
}
for(i=0;i<n;i++)
for(i=0;i<G->numV;i++) //将顶点存入数组中
{printf("请输入第%d个顶点的信息(整型):",i+1);
scanf("%d",&G->Vertices[i]);
}
printf("\n");
for(i=0;i<G->numE;i++)
{printf("请输入边的信息i,j,w(以空格分隔):");
scanf("%d%d%d",&vi,&vj,&w); //建立有向图时只有此句
G->Edge[vi-1][vj-1]=w;
G->Edge[vj-1][vi-1]=w; //建立均向图片时要此句
}
}
void DispGraph(AdjMatrix G) //输出邻接矩阵的信息
{int i,j;
printf("\n输出顶点的信息(整型):\n");
for(i=0;i<G.numV;i++)
printf("%8d",G.Vertices[i]);
printf("\n输出邻接矩阵:\n");
printf(" ");
for(i=0;i<G.numV;i++)
printf("%8d",G.Vertices[i]);
for(i=0;i<G.numV;i++)
{printf("\n%8d",i+1);
for(j=0;j<G.numV;j++)
{if(G.Edge[i][j]==32767) //无边时值为32767,但输出时为了方便输出 "∞"
printf("%8s", "∞");
else
printf("%8d",G.Edge[i][j]);
}
printf("\n");
}
}
typedef struct //定义最小生成树的带权边
{int begin,end;//边的起点和终点
int weight; //边的权值
}MinSpanTree;
void Prim(AdjMatrix G) //最小生成树的普里姆算法
{int n,j,k,v,min,m;
n=G.numV;
MinSpanTree e,mintree[100]; //mintree生成树数组
for(j=1;j
<n;j++) //初始化mintree
{mintree[j-1].begin=1; //将1并入U中
mintree[j-1].end=j+1;
mintree[j-1].weig
C语言数据结构实验,已经调试成功。直接复制即可运行。由于文库不支持C文件,所以将扩展名改为了TXT,可下载后直接将其改为C或cpp即可直接运行。
ht=G.Edge[0][j];
}
for(k=0;k<n-1;k++) //求第k+1条边
{min=MaxWeight;
for(j=k;j<n-1;j++)
if(mintree[j].weight<min)
{min=mintree[j].weight;m=j;}
e=mintree[m];mintree[m]=mintree[k];mintree[k]=e;
v=mintree[k].end;
for(j=k+1;j<n-1;j++) //在新顶点v并入U之后更新tree[n-1]
{int d=G.Edge[v-1][mintree[j].end-1];
if(d<mintree[j].weight)
{mintree[j].weight=d;
mintree[j].begin=v;
}
}
}
printf("最小生成树为:");
for(j=0;j<n-1;j++)
printf("\ni=%d,j=%d,weight=%d",mintree[j].begin,mintree[j].end,mintree[j].weight);
printf("\n");
}
正在阅读:
无向图(使用邻接矩阵)04-22
【化学】2.1.2《脂肪烃》教案(新人教版选修5)05-27
Lady Chatterleys Lover A Sexual Love or a Spiritual Love英语05-25
测量学试题+详细答案09-11
巾帼志愿者管理办法03-01
高校五一期间疫情防控通知03-31
大学英语精读第三版第二册课后答案05-28
2022-2022年中国棒糖机产业市场运行及产业发展趋势研究报告04-15
立式圆筒形钢制焊接储罐施工全套资料实例01-05
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 无向
- 邻接
- 矩阵
- 使用
- 2015年黑龙江省教师资格证小学《综合素质》写作预测及优秀范文十
- 您好:与oracle 数据库连接,读写相关方法如下:
- 荣耀归于真神 中英文
- 目 录(高考英语语法)
- 2013年最新电大西方经济学本科计算题
- 基于映射方法的柔性制造系统建模及仿真程序设计
- 有理数的混合运算补救练习
- 丹佛斯变频器_VLT2800_操作手册
- 工贸企业安全生产标准化评审办法和评审实务
- 病句课堂练习及答案
- 湖南长沙通程国际大酒店LTE室内分布系统设计方案
- 木耳坝滑坡治理工程监理工作报告
- 2022国考技巧:避开复杂方程,巧解三者十字交叉
- 砌体及抹灰工程施工方案
- 人教版《第九章 电与磁》单元测试题及答案解析
- 安徽省黄山市屯溪一中2015-2022学年高一政治上学期期中试题
- 小学教师师德师风学习心得体会
- 高级财务管理复习要点(整理版)
- 2022年最新版小学一年级数学拓展题(可直接打印)
- 中职英语拓展模块练习册Unit 4完形译文