DFS算法遍历任意两点之间的所有路径并输出Word格式.docx

上传人:b****2 文档编号:15227511 上传时间:2022-10-28 格式:DOCX 页数:12 大小:25.33KB
下载 相关 举报
DFS算法遍历任意两点之间的所有路径并输出Word格式.docx_第1页
第1页 / 共12页
DFS算法遍历任意两点之间的所有路径并输出Word格式.docx_第2页
第2页 / 共12页
DFS算法遍历任意两点之间的所有路径并输出Word格式.docx_第3页
第3页 / 共12页
DFS算法遍历任意两点之间的所有路径并输出Word格式.docx_第4页
第4页 / 共12页
DFS算法遍历任意两点之间的所有路径并输出Word格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

DFS算法遍历任意两点之间的所有路径并输出Word格式.docx

《DFS算法遍历任意两点之间的所有路径并输出Word格式.docx》由会员分享,可在线阅读,更多相关《DFS算法遍历任意两点之间的所有路径并输出Word格式.docx(12页珍藏版)》请在冰豆网上搜索。

DFS算法遍历任意两点之间的所有路径并输出Word格式.docx

inttemp=-1;

for(inti=0;

i<

L;

i++)

{

path->

setPos(i);

getValue(temp);

cout<

<

temp;

if(i!

=L-1)

cout<

"

>

;

}

cout<

endl;

}

voidDFS(Graph*G,intv,intend,AList<

*path){

G->

setMark(v,VISITED);

//标记为已访问,防止路径重复

path->

append(v);

//记录节点

if(v==end)//到达终点

//在这里对路径进行处理

PrintPath(path);

//打印整条路径

else//否则

for(intw=G->

first(v);

w<

G->

n();

w=G->

next(v,w))//继续寻找下一个未访问的点

if(G->

getMark(w)==UNVISITED)

DFS(G,w,end,path);

//把找到的未访问节点w作为起点,进入递归

//重点:

没有未访问邻居节点(陷入了死路)或者到达终点,后退找新的未访问路径

G->

setMark(v,UNVISITED);

//回溯标记为未访问

//从path中移除V

path->

setEnd();

remove();

intmain(intargc,char*argv[])

{

intmapTemp[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

///\/\

//036

//\/\/

//2--5

//

//初始化

Graphm*map=newGraphm(8);

8;

for(intj=0;

j<

j++)

map->

setEdge(i,j,mapTemp[i][j]);

//setedge(v1,v2)towgt

setAllMark(UNVISITED);

AList<

*path=newAList<

ints=1;

//起点

inte=7;

//终点

//开始遍历

DFS(map,s,e,path);

return0;

/**********************************************************************/

//图的抽象类

//Graph.h

classGraph{

public:

virtualn()=0;

virtuale()=0;

virtualintfirst(int)=0;

virtualintnext(int,int)=0;

virtualvoidsetEdge(int,int,int)=0;

virtualvoiddelEdge(int,int)=0;

virtualintweight(int,int)=0;

virtualintgetMark(int)=0;

virtualvoidsetMark(int,int)=0;

virtualvoidsetAllMark(int)=0;

//自己添加的

};

//图的实现

//Graphm.h

#defineUNVISITED0

#defineVISITED1

classGraphm:

publicGraph{//Implementadjacencymnatrix

private:

intnumVertex,numEdge;

int**matrix;

//Pointertoadjacencymatrix

int*mark;

//Pointertomarkarray

Graphm(intnumVert){//Markgraphw/numVertvertices

inti,j;

numVertex=numVert;

numEdge=0;

mark=newint[numVert];

//Initializemarkarray

for(i=0;

numVertex;

mark[i]=UNVISITED;

matrix=(int**)newint*[numVertex];

//Markmatrix

matrix[i]=newint[numVertex];

//Edgesstartw/0weight

for(j=0;

matrix[i][j]=0;

~Graphm(){//Destructor

delete[]mark;

//Returndynameicallyallocatedmemory

for(inti=0;

delete[]matrix[i];

delete[]matrix;

intn(){returnnumVertex;

}//Numberofvertices

inte(){returnnumEdge;

}//Numberofedges

intfirst(intv){//Returnv'

sfirstneighbor

inti;

if(matrix[v][i]!

=0)returni;

returni;

//Returnnifnone

intnext(intv1,intv2){//Getv1'

sneighborafterv2

for(i=v2+1;

if(matrix[v1][i]!

//setedge(v1,v2)towgt

voidsetEdge(intv1,intv2,intwgt){

assert(wgt>

=0);

if(matrix[v1][v2]==0)numEdge++;

matrix[v1][v2]=wgt;

voiddelEdge(intv1,intv2){

if(matrix[v1][v2]!

=0)numEdge--;

matrix[v1][v2]=0;

intweight(intv1,intv2){returnmatrix[v1][v2];

intgetMark(intv){returnmark[v];

voidsetMark(intv,intval){mark[v]=val;

voidsetAllMark(intval){

mark[i]=val;

//用到的Alist

//AList.h

#ifndef_ALIST_H

#define_ALIST_H

#ifndefNULL

constintNULL=0;

#endif//NULL

template<

classElem>

classAList{

intmaxSize;

intlistSize;

intfence;

Elem*listArray;

voidcapacityExpansion()

Elem*temp=newElem[maxSize*=2];

intn=listSize;

Elem*destprt=temp;

Elem*srcprt=listArray;

while(n--)

*destprt++=*srcprt++;

delete[]listArray;

listArray=temp;

AList(intsz=50){

maxSize=sz;

listSize=fence=0;

listArray=newElem[maxSize];

AList(AList&

item){

maxSize=item.maxSize;

listSize=item.listSize;

fence=item.fence;

Elem*destprt=listArray;

Elem*srcoprt=item.listArray;

~AList(){

delete[]listArray;

voidclear(){//清除数组里的内容(maxSize->

50)

listArray=newElem[50];

voidinsert(Elem&

item){//在fence位置插入元素

if(listSiz

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1