




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#define t true#define f false#include<iostream.h>struct node/定义一个结构作为节点类型 int data; bool sign; /标志位,用来标示是否遍历过 node *next;node* creategraph()/建立邻接表,完成无向图的输入 int l,m,n; bool g; cout<<"请输入节点数: " cin>>n; node *adjacencylist=new noden+1; /动态分配节点数组内存 adjacencylist0.data=n; /0地址
2、存放的为节点数 adjacencylist0.next=NULL; for(int i=1;i<=n;i+) /给各顶点域赋初值 adjacencylisti.data=0; adjacencylisti.next=NULL; adjacencylisti.sign=f;/表示未遍历 cout<<"请依次输入各条边的始点和尾点:(以0表示结束)"<<endl; cin>>l; if(l!=0) /判断输入边是否结束 g=t; while(g=t) cin>>m; if(l>0)&&(l<=n)
3、&&(m>0)&&(m<=n) /判断输入顶点是否正确 node *p,*q,*top; p=(node *)new(node); /分配边的一个顶点内存 p->data=m; p->next=NULL; if(adjacencylistl.next=NULL) /为每个节点创建邻接链表 adjacencylistl.next=p; else top=adjacencylistl.next; while(top->next!=NULL) top=top->next; top->next=p; adjacencylistl
4、.data+; /统计邻接点的个数 q=(node *)new(node); /分配边的另一个顶点内存 q->data=l; q->next=NULL; if(adjacencylistm.next=NULL) /构建邻接表 adjacencylistm.next=q; else top=adjacencylistm.next; while(top->next!=NULL) top=top->next; top->next=q; adjacencylistm.data+; /统计邻接点的个数 else cout<<"边"<&l
5、t;l<<"-"<<m<<"输入错误!"<<endl;/错误输入标识 cin>>l; if(l=0)/边的输入结束 g=f; return adjacencylist; /返回邻接表;void DepthFirstSearch(node *list)/深度优先搜索 int m,n=list0.data,k,*a=new intn;/设置一个数组用于存放节点 node *p; cout<<"采用深度优先搜索:"<<endl; cout<<&q
6、uot;请输入搜索起始节点:" cin>>k; for(int i=0;i<n;i+) ai=k; listk.sign=t; if(i=n-1) break; m=0; while(listk.sign=t) p=listk.next; while(p!=NULL) /找出listk链表中的未遍历节点 k=p->data; p=p->next; if(listk.sign=f) break; m+; if(listk.sign!=f) /判断是否是p=NULL跳出while循环的 if(i<m)/无节点可回溯 cout<<"
7、该图为非连通图!"<<endl; break; else k=ai-m; /回溯 for(i=1;i<=n;i+)/恢复原邻接表 listi.sign=f; cout<<"深度优先搜索遍历顺序为:" for(i=0;i<n;i+)/输出遍历结果 cout<<ai<<" " cout<<endl; delete a;/释放动态数组内存;void BreadthFirstSearth(node *list)/广度优先搜索 int m,r,k,n=list0.data,*a=ne
8、w intn+1; /设置数组存放节点 node *p; cout<<"采用广度优先搜索:"<<endl; cout<<"请输入搜索起始节点:" cin>>k; a0=n; a1=k; listk.sign=t; /标识遍历的第一个节点 m=0; r=1; while(m!=r) m+; p=listam.next; while(p!=NULL) k=p->data; if(listk.sign=f) r+; ar=k; /遍历到的节点存入数组 listk.sign=t; /标识已经遍历过的节点 p=
9、p->next; for(int i=1;i<=n;i+) /恢复原邻接表 listi.sign=f; cout<<"广度优先搜索遍历顺序为: " for(i=1;i<=n;i+) /输出遍历 cout<<ai<<" " cout<<endl; delete a; /释放动态数组内存;void PathSearth(node *list)/路径搜索 int *a,c,d,m,k,n=list0.data; cout<<"请输入起始点:" cin>>
10、;k; cout<<"请输入尾节点:" cin>>c; cout<<"请输入要找的路径长度:" cin>>d; d=d+1; if(d>n) cout<<"不存在这样的简单路径!"<<endl; else a=new intd; /动态分配数组内存存放路径上的节点 for(int i=0;i<d;i+) ai=0; a0=k; node *p; int x; lista0.sign=t; i=1; while(ad-1!=c) while(i<d
11、) x=1; p=listai-1.next; while(p!=NULL) m=p->data; if(i=d-1&&m=a0&&a0=c) /路径存在且为回路 cout<<"该路径为一条回路!"<<endl; ai=m; i+; break; if(listm.sign=f) if(ai!=0) if(x=0) /是否为已经判断过的错误路径 ai=m; listai.sign=t; /标识走过节点 i+; break; if(ai=m) /设置错误路径标识 x=0; else ai=m; listai.sig
12、n=t; /标识走过节点 i+; break; p=p->next; if(p=NULL) ai=0; i-; /由此节点往下的路径不存在,回溯 listai.sign=f; /还原标识符 if(i=0) /无法回溯,路径不存在,跳出循环 cout<<"不存在这样的简单路径!"<<endl; break; if(i=0) /无法回溯,路径不存在,跳出循环 break; if(ad-1!=c) /路径不是所要找的 i-; /回溯 if(i>=0) listai.sign=f; /还原标识符 if(ad-1=c) /判断路径是否找到并输出 c
13、out<<"从节点"<<k<<"到节点"<<c<<"的一条路径为:" for(i=0;i<d-1;i+) /输出路径 cout<<ai<<"-> " cout<<ad-1<<endl; delete a; for(int i=1;i<=n;i+) /恢复原邻接表 listi.sign=f; ;void AdjacencyListDelete(node *list)/释放邻接表的空间 node
14、 *p,*q; int n=list0.data; for(int i=1;i<=n;i+) p=listi.next; while(p!=NULL) q=p->next; delete p; /释放链表节点空间 p=q; delete list; /释放邻接表空间;void main() node *list; list=creategraph();/以邻接表的形式建立一个无向图 char a,b; cout<<"请选择遍历方法:(d:深度优先搜索;b:广度优先搜索)" for(int i=1;i<2;i+) cin>>a; sw
15、itch(a) case 'd': case 'D': DepthFirstSearch(list); cout<<"是否采用广度优先搜索重新遍历?(y:是;n:否)" cin>>b; if(b='y')|(b='Y') BreadthFirstSearth(list); break; case 'b': case 'B': BreadthFirstSearth(list); cout<<"是否采用深度优先搜索重新遍历?(y:是;n:否)" cin>>b; if(b='y')|(b='Y') DepthFirstSearch(list); break; default: cout<<"输入错误!请重新输入!"<<endl; i-; w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国沙龙家具行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030中国汽车黑匣子行业市场深度调研及发展趋势和投资前景预测研究报告
- 2025-2030中国汽车门锁市场运行剖析与发展趋势预测分析研究报告
- 2025-2030中国汽车节能服务行业市场深度调研及发展策略与投资前景研究报告
- 2025-2030中国汽车租赁行业市场发展分析及发展趋势与投资前景研究报告
- 2025-2030中国汽车坐垫行业发展分析及发展前景与投资研究报告
- 2025-2030中国汞吸附剂行业市场发展趋势与前景展望战略研究报告
- 2024年CPMM考试全景试题及答案梳理
- 2025-2030中国水基聚氨酯分散体行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国水分散聚四氟乙烯行业前景监测及投融资风险预警研究报告
- 初中生物知识竞赛
- 婚姻家庭纠纷预防化解讲座
- (一模)江门市2025年高考模拟考试生物试卷(含答案)
- 2024中国环保公益组织现状调研报告
- 安徽校考面试题及答案
- 2024年广东省公务员《申论(省市级)》试题真题及答案
- (一模)2025届安徽省“江南十校”高三联考化学试卷(含官方答案)
- 2024年滁州来安农商银行社会招聘笔试真题
- 新教科版小学1-6年级科学需做实验目录
- 非洲猪瘟PCR检测实验室建设方案参考
- 我县基层农技推广体系建设情况的调查报告
评论
0/150
提交评论