DFS算法:遍历任意两点之间的所有路径并输出
更新时间:2024-01-31 17:28:01 阅读量: 教育文库 文档下载
- DFS深度优先遍历算法推荐度:
- 相关推荐
DFS算法:遍历任意两点之间的所有路径并输出
代码大部分都是从数据结构书上来的,水平有限仅供参考!希望对课程设计要用到这个算法的同学有帮助
先看运行结果: 起点1,终点7
基本代码都是从数据结构书上抄来的,重点看红字。
全部源代码
//mian的实现
#include \#include \#include \#include \#include \#include %using namespace std;
void PrintPath(AList void DFS(Graph* G,int v,int end,AList if(v==end) //到达终点 //在这里对路径进行处理 PrintPath(path); //打印整条路径 else //否则 for(int w=G->first(v);w //重点:没有未访问邻居节点(陷入了死路)或者到达终点,后退找新的未访问路径 G->setMark(v,UNVISITED); //回溯 标记为未访问 //从path中移除V path->setEnd(); path->remove(); } int main(int argc, char* argv[]) { int mapTemp[8][8]={ {0,1,1,0,0,0,0,0},//0 {1,0,0,1,1,0,0,0},//1 {1,0,0,1,0,1,0,0},//2 {0,1,1,0,1,1,0,0},//3 {0,1,0,1,0,0,1,1},//4 {0,0,1,1,0,0,1,0},//5 {0,0,0,0,1,1,0,0},//6 {0,0,0,0,1,0,0,0} //7 }; // 7 // / // 1--4 // /\\ /\\ // 0 3 6 // \\/ \\ / // 2--5 // //初始化 Graphm *map=new Graphm(8); for(int i=0;i<8;i++) for(int j=0;j<8;j++) map->setEdge(i,j,mapTemp[i][j]);//set edge(v1,v2)to wgt map->setAllMark(UNVISITED); AList DFS(map,s,e,path); return 0; } /**********************************************************************/ //图的抽象类 //Graph.h class Graph{ public: virtual n()=0; virtual e()=0; virtual int first(int)=0; virtual int next(int,int)=0; virtual void setEdge(int,int,int)=0; virtual void delEdge(int,int)=0; virtual int weight(int,int)=0; virtual int getMark(int)=0; virtual void setMark(int,int)=0; virtual void setAllMark(int)=0; //自己添加的 }; /**********************************************************************/ //图的实现 //Graphm.h #define UNVISITED 0 #define VISITED 1 class Graphm:public Graph{ //Implement adjacency mnatrix private: int numVertex,numEdge; int **matrix; //Pointer to adjacency matrix int *mark; //Pointer to mark array public: Graphm(int numVert){ //Mark graph w/numVert vertices int i,j; numVertex=numVert; numEdge=0; mark=new int[numVert]; //Initialize mark array for(i=0;i int i; for(i=v2+1;i //set edge(v1,v2)to wgt void setEdge(int v1,int v2,int wgt){ assert(wgt>=0); if(matrix[v1][v2]==0) numEdge++; matrix[v1][v2]=wgt; } void delEdge(int v1,int v2){ if(matrix[v1][v2]!=0) numEdge--; matrix[v1][v2]=0; } int weight(int v1,int v2){return matrix[v1][v2];} int getMark(int v){return mark[v];} void setMark(int v,int val){mark[v]=val;} void setAllMark(int val){ for(int i=0;i /**********************************************************************/ //用到的Alist //AList.h #ifndef _ALIST_H #define _ALIST_H #ifndef NULL const int NULL=0; #endif //NULL template int fence; Elem* listArray; void capacityExpansion() { Elem* temp=new Elem[maxSize*=2]; int n=listSize; Elem* destprt=temp; Elem* srcprt=listArray; while(n--) *destprt++=*srcprt++; delete[] listArray; listArray=temp; } public: AList(int sz=50){ maxSize=sz; listSize=fence=0; listArray=new Elem[maxSize]; } AList(AList &item){ maxSize=item.maxSize; listSize=item.listSize; fence=item.fence; listArray=new Elem[maxSize]; int n=listSize; Elem* destprt=listArray; Elem* srcoprt=item.listArray; while(n--) *destprt++=*srcprt++; } ~AList(){ delete []listArray; } void clear(){ //清除数组里的内容(maxSize->50) delete []listArray; listArray=new Elem[50]; listSize=fence=0; } void insert(Elem& item){ //在fence位置插入元素 if(listSize==maxSize) capacityExpansion(); int n=rightLength(),i=listSize++; while(n--) listArray[i--]=listArray[i-1]; listArray[fence]=item; } void append(Elem& item){ //在数组末尾插入元素 if(listSize==maxSize) capacityExpansion(); listArray[listSize++]=item; } void remove(Elem& item){ //删除fence位置的元素,通过引用返回被删元素 item=listArray[fence]; Elem* temp=new Elem[maxSize]; for(int i=0,j=0;i fence=listSize; } bool prev(){ //fence向前移动一位 (0= //后期修改的 int Length(){ return listSize; } }; #endif //_ALIST_H
正在阅读:
高中语文易错成语08-13
学校食品安全协议书06-12
流速流量管径之间的关系12-21
幼儿园生成主题活动“天气”的设计与实施12-14
Chapter 2 Organization and Structure of the Auditing Profession05-21
江苏省昆山市2011~2012学年第二学期第二次质量测试04-06
抽象的风景图片02-09
浙江省台州中学2014-2015学年高一第一学期第一次统练试题数学11-25
季节性施工方案 - 图文04-13
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 遍历
- 算法
- 路径
- 两点
- 输出
- 任意
- 之间
- 所有
- DFS
- 尔雅《探索发现—生命》章节答案
- 公共基础知识试题及答案
- 2011长沙市雅礼中学省理科实验班数学考试试卷(含答案)
- PCT课件 - 图文
- 转变工作作风典型案例
- 2018版高三物理一轮复习专题5万有引力定律含2015年高考真题
- PLC控制五层电梯毕业设计 - 图文
- 物料承认管理规定
- 浅析古玉皮壳之变系列四 - 图文
- 千题百炼 - 高考数学100个热点问题(一):第4炼 函数值域的求法
- 河南大学文件
- 第十章交变电流传感器
- 中国苏州园林为何闻名于世
- XX文化产业基金合作方案(1)
- 新形势下统战工作存在的问题与思考
- 青岛理工大学C++考试真题
- 2017年内蒙古鄂尔多斯市中考数学试题及参考答案(word解析版)
- 中华人民共和国铁道部《旅客列车消防管理规定》
- 安全知识竞赛题复习题
- weblogic服务器下一个domain建多个server(端口) - 图文