DFS算法:遍历任意两点之间的所有路径并输出
更新时间:2024-04-13 01:47: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
正在阅读:
地质填图实习报告 doc11-29
PCT及CRP在肺部感染病原体鉴别诊断中的临床价值01-04
由水黾得到的启示作文600字07-10
教育需要“第三只眼”——用赏识的眼光看待特殊孩子的教育问题05-28
中国联通合作方自服务门户系统操作手册-合作方人员操作V - 1.012-10
2014年设计模式考试题10-07
论网络型开设赌场犯罪中的从犯认定09-06
胶合板模板的进场验收与贮203-14
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 遍历
- 算法
- 路径
- 两点
- 输出
- 任意
- 之间
- 所有
- DFS