欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言版图的深度和广度优先遍历源代码(共6页).doc

    • 资源ID:5437589       资源大小:53.50KB        全文页数:6页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言版图的深度和广度优先遍历源代码(共6页).doc

    精选优质文档-倾情为你奉上表示的图:#include"stdio.h"#include"stdlib.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;i<G->n;i+) /建立边表scanf("%c",&a);G->adjlisti.vertex=a; /读入顶点信息G->adjlisti.firstedge=NULL; /边表置为空表printf("Input edges,Creat Adjacency Listn");for(k=0;k<G->e;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;i<G->n;i+)visitedi=FALSE; /标志向量初始化for(i=0;i<G->n;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;i<G->n;i+)visitedi=FALSE; /标志向量初始化for(i=0;i<=G->n;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");表示的图:#include"stdio.h"#include"stdlib.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;i<G->n;i+) scanf("%c",&a);G->vexsi=a; /读入顶点信息,建立顶点表for(i=0;i<G->n;i+)for(j=0;j<G->n;j+)G->edgesij=0; /初始化邻接矩阵printf("Input edges,Creat Adjacency Matrixn");for(k=0;k<G->e;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;j<G->n;j+) /依次搜索Vi的邻接点if(G->edgesij=1 && ! visitedj)DFSM(G,j); /(Vi,Vj)E,且Vj未访问过,故Vj为新出发点void DFS(MGraph *G) int i;for(i=0;i<G->n;i+)visitedi=FALSE; /标志向量初始化for(i=0;i<G->n;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;i<G->n;i+)visitedi=FALSE; /标志向量初始化for(i=0;i<G->n;i+)cqi=-1; /队列初始化printf("%c",G->vexsk); /访问源点Vkvisitedk=TRUE;cqr=k; /Vk已访问,将其入队。注意,实际上是将其序号入队while(cqf!=-1) /队非空则执行i=cqf; f=f+1; /Vf出队for(j=0;j<G->n;j+) /依次Vi的邻接点Vjif(!visitedj && G->edgesij=1) /Vj未访问printf("%c",G->vexsj); /访问Vjvisitedj=TRUE; r=r+1; cqr=j; /访问过Vj入队/=main=void main()/int i;MGraph *G;G=(MGraph *)malloc(sizeof(MGraph); /为图G申请内存空间CreatMGraph(G); /建立邻接矩阵printf("Print Graph DFS: ");DFS(G); /深度优先遍历printf("n");printf("Print Graph BFS: ");BFS(G,3); /以序号为3的顶点开始广度优先遍历printf("n");专心-专注-专业

    注意事项

    本文(C语言版图的深度和广度优先遍历源代码(共6页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开