收藏 分销(赏)

采用连接表存储有向图,设计算法判断任意两个顶点间是否存在路径.doc

上传人:xrp****65 文档编号:7455457 上传时间:2025-01-05 格式:DOC 页数:4 大小:55KB 下载积分:10 金币
下载 相关 举报
采用连接表存储有向图,设计算法判断任意两个顶点间是否存在路径.doc_第1页
第1页 / 共4页
采用连接表存储有向图,设计算法判断任意两个顶点间是否存在路径.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
十一、采用连接表存储有向图,设计算法判断任意两个顶点间是否存在路径 #include "stdio.h" #include "stdlib.h" #include "malloc.h" #define max 100 //顶点的最大个数 #define NULL 0 typedef struct st1{ //定义邻接表中结点类型 int adjvex; //邻接点的位置 struct st1 *nextarc; //指向下一个结点 char info; //边的信息 }Arcnode; typedef struct{ //定义邻接表中头结点类型 char vexdata; //顶点信息 Arcnode *firstarc; //指向第一个邻接结点 }AdjList; typedef struct{ //定义邻接表表头 AdjList vextices[max]; //存放表头结点信息 int vexnum,arcnum; //有向图的顶点数和边数 }AlGraph; int visited[max]; //定义深度优先搜索遍历数组,0表示未被访问过,1表示已被访问过 int flag=0; //定义全局标志变量,用来确定两点间是否为通路,1表示存在,0表示不存在 /////////////////////////////////////////////////////////////////////建立邻接表 AlGraph *create_AdjListGraph(){ int n,e,i,j,k; Arcnode *p; AlGraph *al; al=(AlGraph *)malloc(sizeof(AlGraph)); printf("请输入结点数:"); scanf("%d",&n); for(i=1;i<=n;i++){ //初始化表头结点数组 al->vextices[i].vexdata=(char)i; //数据域存放顶点序号 al->vextices[i].firstarc=NULL; } printf("请输入边数:"); scanf("%d",&e); printf("请输入弧的信息:"); for(i=0;i<e;i++){ scanf("%d%d",&j,&k); //依次读入弧的信息,结点k为结点j的邻接点 p=(Arcnode *)malloc(sizeof(Arcnode)); //申请结点空间,分配结点 p->adjvex=k; p->info=' '; p->nextarc=al->vextices[j].firstarc; al->vextices[j].firstarc=p; } al->vexnum=n; al->arcnum=e; return al; } //////////////////////////////////////////////////////////////输出邻接表 void print(AlGraph *alg){ int i; Arcnode *p; printf("图的邻接表为:\n"); for(i=1;i<=alg->vexnum;i++){ printf("\t%d-",alg->vextices[i].vexdata); p=alg->vextices[i].firstarc; while(p!=NULL){ printf("%d-",p->adjvex); p=p->nextarc; } printf("<\n"); //符号“<”表示空结点 } } ///////////////////////////////////////////////////////////释放邻接表结点空间 void FreeAlGraph(AlGraph *alg){ int i; Arcnode *p,*q; for(i=0;i<=alg->vexnum;i++){ p=alg->vextices[i].firstarc; while(p!=NULL){ q=p->nextarc; free(p); p=q; } } } ////////////////////////////////////////////////////深度优先搜索遍历算法 int dfs(AlGraph *alg,int i,int n){ Arcnode *p; visited[i]=1; //标志已被访问 p=alg->vextices[i].firstarc; while(p!=NULL){ if(visited[p->adjvex]==0){ if(p->adjvex==n){ flag=1; } dfs(alg,p->adjvex,n); //访问未被访问过的结点 if(flag==1) return 1; } p=p->nextarc; //搜索下一个邻接点 } return 0; } ////////////////////////////////////////////////初始化遍历数组并进行路径搜索 void dfs_trave(AlGraph *alg,int m,int n){ int i; for(i=0;i<=alg->vexnum;i++) visited[i]=0; //初始化访问数组 dfs(alg,m,n); } /////////////////////////////////////////////////////////////主函数 void main(){ int m,n; //需要判断有无通路的两个结点 AlGraph *alg; alg=create_AdjListGraph(); print(alg); //输出链接表 do{ printf("请输入任意两个顶点(输入两个-1退出):"); scanf("%d%d",&m,&n); dfs_trave(alg,m,n); printf("\n"); if(flag==1) printf("顶点%d到%d存在通路\n",m,n); else printf("顶点%d到%d不存在通路\n",m,n); flag=0; printf("\n"); }while(m!=-1&&n!=-1) ; FreeAlGraph(alg); //释放结点空间 }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服