




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
邻接表表示的图:#includestdio.h#includestdlib.h#define MaxVertexNum 50 /定义最大顶点数typedef struct node /边表结点int adjvex; /邻接点域struct node *next; /链域EdgeNode;typedef struct vnode /顶点表结点char vertex; /顶点域EdgeNode *firstedge; /边表头指针VertexNode;typedef VertexNode AdjListMaxVertexNum; /AdjList是邻接表类型typedef struct AdjList adjlist; /邻接表int n,e; /图中当前顶点数和边数 ALGraph; /图类型/=建立图的邻接表=void CreatALGraph(ALGraph *G)int i,j,k;char a;EdgeNode *s; /定义边表结点printf(Input VertexNum(n) and EdgesNum(e): );scanf(%d,%d,&G-n,&G-e); /读入顶点数和边数fflush(stdin); /清空内存缓冲printf(Input Vertex string:);for(i=0;in;i+) /建立边表scanf(%c,&a);G-adjlisti.vertex=a; /读入顶点信息G-adjlisti.firstedge=NULL; /边表置为空表printf(Input edges,Creat Adjacency Listn);for(k=0;ke;k+) /建立边表 scanf(%d%d,&i,&j); /读入边(Vi,Vj)的顶点对序号s=(EdgeNode *)malloc(sizeof(EdgeNode); /生成边表结点s-adjvex=j; /邻接点序号为js-next=G-adjlisti.firstedge;G-adjlisti.firstedge=s; /将新结点*S插入顶点Vi的边表头部s=(EdgeNode *)malloc(sizeof(EdgeNode); s-adjvex=i; /邻接点序号为is-next=G-adjlistj.firstedge; G-adjlistj.firstedge=s; /将新结点*S插入顶点Vj的边表头部/=定义标志向量,为全局变量=typedef enumFALSE,TRUE Boolean;Boolean visitedMaxVertexNum;/=DFS:深度优先遍历的递归算法=void DFSM(ALGraph *G,int i)/以Vi为出发点对邻接链表表示的图G进行DFS搜索EdgeNode *p;printf(%c,G-adjlisti.vertex); /访问顶点Vivisitedi=TRUE; /标记Vi已访问p=G-adjlisti.firstedge; /取Vi边表的头指针while(p) /依次搜索Vi的邻接点Vj,这里j=p-adjvexif(! visitedp-adjvex) /若Vj尚未被访问DFSM(G,p-adjvex); /则以Vj为出发点向纵深搜索p=p-next; /找Vi的下一个邻接点void DFS(ALGraph *G)int i;for(i=0;in;i+)visitedi=FALSE; /标志向量初始化for(i=0;in;i+)if(!visitedi) /Vi未访问过 DFSM(G,i); /以Vi为源点开始DFS搜索 /=BFS:广度优先遍历=void BFS(ALGraph *G,int k) /以Vk为源点对用邻接链表表示的图G进行广度优先搜索int i,f=0,r=0; EdgeNode *p; int cqMaxVertexNum; /定义FIFO队列 for(i=0;in;i+)visitedi=FALSE; /标志向量初始化for(i=0;in;i+)cqi=-1; /初始化标志向量printf(%c,G-adjlistk.vertex); /访问源点Vkvisitedk=TRUE;cqr=k; /Vk已访问,将其入队。注意,实际上是将其序号入队 while(cqf!=-1) / 队列非空则执行i=cqf; f=f+1; /Vi出队p=G-adjlisti.firstedge; /取Vi的边表头指针while(p) /依次搜索Vi的邻接点Vj(令p-adjvex=j)if(!visitedp-adjvex) /若Vj未访问过printf(%c,G-adjlistp-adjvex.vertex); /访问Vjvisitedp-adjvex=TRUE;r=r+1; cqr=p-adjvex; /访问过的Vj入队p=p-next; /找Vi的下一个邻接点/endwhile/=主函数=void main()/int i;ALGraph *G;G=(ALGraph *)malloc(sizeof(ALGraph);CreatALGraph(G);printf(Print Graph DFS: );DFS(G);printf(n);printf(Print Graph BFS: );BFS(G,3);printf(n);邻接矩阵表示的图:#includestdio.h#includestdlib.h#define MaxVertexNum 100 /定义最大顶点数typedef structchar vexsMaxVertexNum; /顶点表int edgesMaxVertexNumMaxVertexNum; /邻接矩阵,可看作边表int n,e; /图中的顶点数n和边数eMGraph; /用邻接矩阵表示的图的类型/=建立邻接矩阵=void CreatMGraph(MGraph *G)int i,j,k;char a;printf(Input VertexNum(n) and EdgesNum(e): );scanf(%d,%d,&G-n,&G-e); /输入顶点数和边数scanf(%c,&a); printf(Input Vertex string:);for(i=0;in;i+) scanf(%c,&a);G-vexsi=a; /读入顶点信息,建立顶点表for(i=0;in;i+)for(j=0;jn;j+)G-edgesij=0; /初始化邻接矩阵printf(Input edges,Creat Adjacency Matrixn);for(k=0;ke;k+) /读入e条边,建立邻接矩阵 scanf(%d%d,&i,&j); /输入边(Vi,Vj)的顶点序号G-edgesij=1; G-edgesji=1; /若为无向图,矩阵为对称矩阵;若建立有向图,去掉该条语句 /=定义标志向量,为全局变量=typedef enumFALSE,TRUE Boolean;Boolean visitedMaxVertexNum;/=DFS:深度优先遍历的递归算法=void DFSM(MGraph *G,int i) /以Vi为出发点对邻接矩阵表示的图G进行DFS搜索,邻接矩阵是0,1矩阵int j;printf(%c,G-vexsi); /访问顶点Vivisitedi=TRUE; /置已访问标志for(j=0;jn;j+) /依次搜索Vi的邻接点if(G-edgesij=1 & ! visitedj)DFSM(G,j); /(Vi,Vj)E,且Vj未访问过,故Vj为新出发点void DFS(MGraph *G) int i;for(i=0;in;i+)visitedi=FALSE; /标志向量初始化for(i=0;in;i+)if(!visitedi) /Vi未访问过DFSM(G,i); /以Vi为源点开始DFS搜索/=BFS:广度优先遍历=void BFS(MGraph *G,int k) /以Vk为源点对用邻接矩阵表示的图G进行广度优先搜索int i,j,f=0,r=0;int cqMaxVertexNum; /定义队列 for(i=0;in;i+)visitedi=FALSE; /标志向量初始化for(i=0;in;i+)cqi=-1; /队列初始化printf(%c,G-vexsk); /访问源点Vkvisitedk=TRUE;cqr=k; /Vk已访问,将其入队。注意,实际上是将其序号入队while(cqf!=-1) /队非空则执行i=cqf; f=f+1; /Vf出队for(j=0;jn;j+) /依次Vi的邻接点Vjif(!visitedj & G-edgesij=1) /Vj未访问printf(%c,G-vexsj); /访问Vjvisitedj=TRUE; r=r+1; cqr=j; /访问过Vj入队/=main=void main()/int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度生态围墙施工与节能改造承包合同范本
- 2025版铁矿石国际贸易结算合同
- 2025年度石材材料市场调研与采购合同
- 2025版企业员工职业规划与团队协作能力培训合同
- 2025版品牌皮鞋品牌授权区域市场推广费用结算合同
- 2025年度水电安装工程安全管理承包合同
- 2025版智能家居控制系统购买及售后服务合同
- 2025版事业单位借调人员管理与服务规范及薪酬福利合同
- 2025版石子包销合同范本(适用环保工程)
- 2025年度智能化企业出纳岗位聘用协议
- 餐饮店食品经营操作流程4篇
- 2025年黑龙江、吉林、辽宁、内蒙古高考生物真题试卷(解析版)
- 药物治疗监测试题及答案
- GB/T 45654-2025网络安全技术生成式人工智能服务安全基本要求
- T/CAPA 009-2023面部埋线提升技术操作规范
- 塑胶料品质协议书
- 2025届江苏省苏州市高三9月期初阳光调研-语文试卷(含答案)
- 旅行地接协议书
- DB3707T 120-2024无特定病原凡纳滨对虾种虾循环水养殖技术规范
- 安全课件小学
- 租房协议书合同txt
评论
0/150
提交评论