有向图的路径问题
更新时间:2024-06-28 03:19:01 阅读量: 综合文库 文档下载
实验五——有向图的路径问题
1.
问题描述
对于有向图G=(V,E),任意Vi,Vj∈V(Vi≠Vj),判断从顶点Vi到顶点Vj是否存在路径。
2.
基本要求
(1) 设计图的存储结构 (2) 设计算法完成问题求解
(3) 设计存储从Vi到Vj路径的存储结构
(4) 输入:图可以初始化方式获取、从键盘读入或从文件读入
3.
存储结构
struct ArcNode //定义边表结点
{
int adjvex; //其代表邻接点域,即是结点数组下标 ArcNode *next; }
struct VertexNode //定义顶点表结点 {
T vertex;
ArcNode *firstedge; };
核心函数初始化函数
ALGraph
vertexNum=n; arcNum=e;
for(int i=0;i for(i=0;i adjlist[i].vertex=a[i]; adjlist[i].firstedge=NULL; } for(int k=0;k int i,j; cout<<\请输入两组数字:\ cin>>i>>j; ArcNode *s; s=new ArcNode; s->adjvex=j; //输入依附的两个顶点的序号 s->next=adjlist[i].firstedge; adjlist[i].firstedge=s; //头插法 } } 判断两点是否存在路径 int ALGraph int stack[MaxSize]; int top; int yes; int visited3[MaxSize]; for(int k=0;k visited[i]=1;yes=0; stack[++top]=i; while(top!=-1&&yes==0) { i=stack[top]; ArcNode *p; p=adjlist[i].firstedge; while(p&&yes==0) { int t; t=p->adjvex; //cout< else if(visited3[t]==0) { visited3[t]=1; stack[++top]=t; } else p=p->next; } //if(!p) top--; //注意这里的p值代表的是顶点表的firstedge,其始终在,这行代码将使程序陷入是循环,无法得出正确的结果 } return yes; } 4. 源程序 #include struct ArcNode //定义边表结点 { int adjvex; //其代表邻接点域,即是结点数组下标 ArcNode *next; }; template struct VertexNode //定义顶点表结点 { T vertex; ArcNode *firstedge; }; template public: ALGraph(T a[],int n,int e); //~ALGraph(); //析构函数可以由系统自己调用,如果定义了,没有写出其算,就容易出错,thiscall---- void DFSTraverse(int v); void BFSTraverse(int v); void DFS(int v); int DFS1(int i,int j); private: VertexNode int vertexNum,arcNum; int visited[MaxSize]; }; template ALGraph vertexNum=n; arcNum=e; for(int i=0;i for(i=0;i adjlist[i].vertex=a[i]; adjlist[i].firstedge=NULL; } for(int k=0;k int i,j; cout<<\请输入两组数字:\ cin>>i>>j; ArcNode *s; s=new ArcNode; s->adjvex=j; //输入依附的两个顶点的序号 s->next=adjlist[i].firstedge; adjlist[i].firstedge=s; //头插法 } } template void ALGraph cout< ArcNode *p; p=adjlist[v].firstedge; while(p) { j=p->adjvex; if(visited[j]==0) DFSTraverse(j); p=p->next; } } template void ALGraph int visited1[MaxSize]; int q[MaxSize]; //存放的是邻接点域 int front,rear; for(int i=0;i cout< q[++rear]=v; //模拟入队操作 while(front!=rear) { v=q[++front]; //模拟进队操作 ArcNode *p; p=adjlist[v].firstedge; while(p) { int j; j=p->adjvex; if(visited1[j]==0) { cout< p=p->next; } } } template void ALGraph int i,visited2[MaxSize],s[MaxSize],top=-1; ArcNode *p; for(i=0;i cout<=-1) { v=s[top]; top--; p=adjlist[v].firstedge; while(p!=NULL&&visited2[p->adjvex]==1) p=p->next; if(p==NULL) top--; else { v=p->adjvex; cout< s[top]=v; } } cout< template int ALGraph int stack[MaxSize]; int top; int yes; int visited3[MaxSize]; for(int k=0;k visited[i]=1;yes=0; stack[++top]=i; while(top!=-1&&yes==0) { i=stack[top]; ArcNode *p; p=adjlist[i].firstedge; while(p&&yes==0) { int t; t=p->adjvex; //cout< else if(visited3[t]==0) { visited3[t]=1; stack[++top]=t; } else p=p->next; } //if(!p) top--; //注意这里的p值代表的是顶点表的firstedge,其始终在,这行代码将使程序陷入是循环,无法得出正确的结果 } return yes; } void main() { int a[5]={1,2,3,4,5}; ALGraph cout<<\邻接表深度非递归算法结果:\A.DFS(0); cout<<\邻接表广度优先算法遍历结果:\A.BFSTraverse(0);cout< cout<<\请输入你要寻找的两个路径的结点:\int m,n; cin>>m>>n; cout<<\if(A.DFS1(m,n)) cout<<\两结点之间存在路径!\else cout<<\两结点之间不存在路径!\ } 5. 运行截图
正在阅读:
有向图的路径问题06-28
模糊控制习题04-03
怎样与业主有效沟通的基本技巧12-13
工程材料的本构方程05-07
SS6B毕业设计2 - 图文09-23
2016年竞赛与自主招生专题第十六讲:解析几何二(教师版)01-25
试题12-01
人这一辈子,无非是个过程...08-02
小英雄雨来的故事06-12
地形地质作用与地貌专题 - 图文12-28
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 有向图
- 路径
- 问题
- 基于我国当前房地产企业融资问题的研究
- 2014届高三数学一轮复习专讲专练(基础知识):3.2同角三角函数
- 2011年考研英语模拟测试题及参考答案四
- 采煤沉陷区综合治理工程项目可行性研究报告
- 集团管控存在的问题 - 图文
- 2017土地估价师实务:利用收益还原法评估承租土地使用权价格的原
- 我爱家乡、校园作文集
- 194个英语词汇起源及巧记的方法(印)
- 宽幅塑料流延薄膜技术及其装备
- 谈判与推销技巧3
- 2017最新矿井风量计算方法
- 2000-2010年全国高考物理试题分类汇编(中篇)(十二)电磁感应
- 一点矿业英语
- 2014国家公务员政治常识习题精解(64)
- “十三五”重点项目-黄山根鱼项目可行性研究报告 - 图文
- 人教版五年级数学下册分数的意义和性质单元教案
- 湖光岩
- 外国教育史
- 喂母乳,孩子抗压力强 docx
- 病句的辨析与修改20例