欢迎来到天天文库
浏览记录
ID:31906787
大小:39.00 KB
页数:7页
时间:2019-01-26
《无向图的邻接矩阵操作——参考代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.//*******************************************////C语言版数据结构-图的遍历(DFS和BFS)//图的存储结构采用邻接矩阵,DFS算法采用递归算法//BFS采用队列形式实现//Author:CHENQ.L//2013-11-12//Ver1.0//*******************************************//#include#include#include#de
2、fineINFINITYINT_MAX//定义计算机能表示的最大数#defineMAX_VERTEX_NUM20//顶点的最大个数#defineOK1#defineERROR0#defineTRUE1#defineFALSE0typedefintVRType;//边存在否typedefcharInforType;//边的其它辅助信息typedefcharVertexType;//顶点的字母typedefintStatus;typedefenum{DG,DN,UDG,UDN}GraphKind;t
3、ypedefstructArcCell//定义边的信息{VRTypeadj;//对应边存在否0:表示该边不存在InforType*Infor;//对应边的其他信息}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//ArcCell:一条边的信息(不包含该边的行号和列号),AdjMatrix:邻接矩阵,隐含边的坐标typedefstruct{VertexTypevexs[MAX_VERTEX_NUM];//图的顶点集intvexnum,arcnu
4、m;//图的总的顶点个数和总的边数AdjMatrixarcs;//图的边集...}MGraph;intvisited[MAX_VERTEX_NUM];//顶点是否被访问intNum=0;charstr[100];StatusCreate(MGraph&M)//创建无向图的邻接矩阵表示{inti,j,k;charvex1,vex2;printf("请输入图的顶点个数:");scanf("%d",&M.vexnum);//输入顶点总数if(M.vexnum<=0){printf("顶点个数最少为1,
5、请重新输入!");returnERROR;}printf("请输入图的边数:");scanf("%d",&M.arcnum);//输入边总数if(M.arcnum<0){printf("边数小于0,请重新输入!");returnERROR;}getchar();//去掉换行符printf("请输入各个顶点字母:");//多余时,只取前面的M.vexnum个字符gets(str);j=strlen(str);for(i=0;i6、exs[i]=str[i];if(j7、.adj=0;//去掉换行符k=0;while(k8、etchar();//去掉换行符if((i>=M.vexnum)9、10、(j>=M.vexnum))//边的2个顶点中如果存在一个不在顶点集,则重新输入这条比边printf("错误提示:第%d条边的起点或终点输入出错,请重新输入!",i);else//边的2个顶点中都在顶点集中{if(i==j)printf("存在自身到自身的环,不考虑");else{if(M.arcs[i][j].adj==1)//printf("已经存在");else{M.arcs[i][j].adj=1;M.arcs[
6、exs[i]=str[i];if(j7、.adj=0;//去掉换行符k=0;while(k8、etchar();//去掉换行符if((i>=M.vexnum)9、10、(j>=M.vexnum))//边的2个顶点中如果存在一个不在顶点集,则重新输入这条比边printf("错误提示:第%d条边的起点或终点输入出错,请重新输入!",i);else//边的2个顶点中都在顶点集中{if(i==j)printf("存在自身到自身的环,不考虑");else{if(M.arcs[i][j].adj==1)//printf("已经存在");else{M.arcs[i][j].adj=1;M.arcs[
7、.adj=0;//去掉换行符k=0;while(k8、etchar();//去掉换行符if((i>=M.vexnum)9、10、(j>=M.vexnum))//边的2个顶点中如果存在一个不在顶点集,则重新输入这条比边printf("错误提示:第%d条边的起点或终点输入出错,请重新输入!",i);else//边的2个顶点中都在顶点集中{if(i==j)printf("存在自身到自身的环,不考虑");else{if(M.arcs[i][j].adj==1)//printf("已经存在");else{M.arcs[i][j].adj=1;M.arcs[
8、etchar();//去掉换行符if((i>=M.vexnum)
9、
10、(j>=M.vexnum))//边的2个顶点中如果存在一个不在顶点集,则重新输入这条比边printf("错误提示:第%d条边的起点或终点输入出错,请重新输入!",i);else//边的2个顶点中都在顶点集中{if(i==j)printf("存在自身到自身的环,不考虑");else{if(M.arcs[i][j].adj==1)//printf("已经存在");else{M.arcs[i][j].adj=1;M.arcs[
此文档下载收益归作者所有