1、 int temp=-1; for(int i=0;isetPos(i);getValue(temp); couttemp; if(i!=L-1) cout; coutendl; void DFS(Graph* G,int v,int end,AListsetMark(v,VISITED); /标记为已访问,防止路径重复 path-append(v); /记录节点if(v=end) /到达终点 /在这里对路径进行处理 PrintPath(path); /打印整条路径 else /否则 for(int w=G-first(v);wn();w=G-next(v,w) /继续寻找下一个未访问的点 i
2、f(G-getMark(w)=UNVISITED) DFS(G,w,end,path);/把找到的未访问节点w作为起点,进入递归 /重点:没有未访问邻居节点(陷入了死路)或者到达终点,后退找新的未访问路径 G-setMark(v,UNVISITED); /回溯 标记为未访问 /从path中移除V path-setEnd();remove(); int main(int argc, char* argv) int mapTemp88= 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
3、,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);8; for(int j=0;jsetEdge(i,j,mapTempij);/set edge(v1,v2)to wgtsetAllMark(UNVISITED); AList *path=new AList=0); if(matrixv1v2=0) numEdge+; matrixv1v2=wgt; void delEdge(i
4、nt v1,int v2) if(matrixv1v2!=0) numEdge-; matrixv1v2=0; int weight(int v1,int v2)return matrixv1v2; int getMark(int v)return markv; void setMark(int v,int val)markv=val; void setAllMark(int val) marki=val;/用到的Alist/AList.h#ifndef _ALIST_H#define _ALIST_H#ifndef NULLconst int NULL=0;#endif /NULLtempl
5、ateclass AList int maxSize; int listSize; int fence; Elem* listArray; void capacityExpansion() Elem* temp=new ElemmaxSize*=2; int n=listSize; Elem* destprt=temp; Elem* srcprt=listArray; while(n-) *destprt+=*srcprt+; delete listArray; listArray=temp; AList(int sz=50) maxSize=sz; listSize=fence=0; listArray=new ElemmaxSize; AList(AList &item) maxSize=item.maxSize; listSize=item.listSize; fence=item.fence; Elem* destprt=listArray; Elem* srcoprt=item.listArray; AList() delete listArray; void clear() /清除数组里的内容(maxSize-50) listArray=new Elem50; void insert(Elem& item) /在fence位置插入元素 if(listSiz
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1