正在加载图片...
Find all path(Gu、,O),∥在主函数中初次调用k值应为0 3//main 7.29 int Get PathUm Len( ALGraph G, int i, int j, int len)/求邻接表方式存储的有向图G 的顶点i到j之间长度为len的简单路径条数 fir=j&&len=0) return1;/找到了一条路径,且长度符合要求 else if(len>0) sum=0;/sum表示通过本结点的路径数 visited=I for(p=G vertices[ ].firstarc: p p=p->nextarc) if(Ivisited )) sum+= GetPathNum Len(G, L,j, len-)/剩余路径长度减 i//for isited[]=0,∥本题允许曾经被访问过的结点出现在另一条路径中 i/else i//GetPathNum Len 7.30 int visited MAXSIZE] int path[MAXSIZE暂存当前路径 int cycles IMAXSIZEJMAXSIZE]∥储存发现的回路所包含的结点 int thiscycle MAXSIZE]∥储存当前发现的一个回路 Int cycount=0,∥已发现的回路个数 void getallCyclet( ALGraph G/求有向图中所有的简单回路 for(v=0; V<G. vexnum v++)visited v=0 for(v=0; V<G. vexnum; v++) if( visited vD dFS(G,v,O0),∥深度优先遍历 i//DFSTraverse void DFS( ALGraph G, int v, int k)/k表示当前结点在路径上的序号 visited]F= path[k}=v,∥记录当前路径 for(p=Gvertices[v]. firstarc: pP=p->nextarc)Find_All_Path(G,u,v,0); //在主函数中初次调用,k 值应为 0 ... }//main 7.29 int GetPathNum_Len(ALGraph G,int i,int j,int len)//求邻接表方式存储的有向图 G 的顶点 i 到 j 之间长度为 len 的简单路径条数 { if(i==j&&len==0) return 1; //找到了一条路径,且长度符合要求 else if(len>0) { sum=0; //sum 表示通过本结点的路径数 visited[i]=1; for(p=G.vertices[i].firstarc;p;p=p->nextarc) { l=p->adjvex; if(!visited[l]) sum+=GetPathNum_Len(G,l,j,len-1)//剩余路径长度减一 }//for visited[i]=0; //本题允许曾经被访问过的结点出现在另一条路径中 }//else return sum; }//GetPathNum_Len 7.30 int visited[MAXSIZE]; int path[MAXSIZE]; //暂存当前路径 int cycles[MAXSIZE][MAXSIZE]; //储存发现的回路所包含的结点 int thiscycle[MAXSIZE]; //储存当前发现的一个回路 int cycount=0; //已发现的回路个数 void GetAllCycle(ALGraph G)//求有向图中所有的简单回路 { for(v=0;v<G.vexnum;v++) visited[v]=0; for(v=0;v<G.vexnum;v++) if(!visited[v]) DFS(G,v,0); //深度优先遍历 }//DFSTraverse void DFS(ALGraph G,int v,int k)//k 表示当前结点在路径上的序号 { visited[v]=1; path[k]=v; //记录当前路径 for(p=G.vertices[v].firstarc;p;p=p->nextarc)
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有