//输出图G从顶点u 到 v 的所有简单路径
void Allpath(Graph G,int u,int v,int m,int path[],int i){//m记录每一个顶点的下一个邻接点,i初值为0
ENode *p;
int j,n;
if(m==v){
for(j=0;j<=i;j++){
printf("%d\n",path[j]);
}
printf("\n");
}else{
p=G->adjList[m].firstarc;
while(p!=null){
n=p->adjvex;
if(visited[n]==false && n!=v){
visited[n]=true;
path[i+1]=n;
Allpath(G,u,v,n,path,i+1);
visited[n]=false;
}
}
}
}
/*给无向图G 中任意两个顶点i和j
采用邻接表存储
编写算法判断这两个顶点之间是否存在一条长度为k的简单路径
*/
bool visited[maxsize];
bool existPath(Graph G,int i,int j,int k){
if(i==j && k=0){
return true;
}
else if(k>0){
visited[i]=true;
for(Node *p=adjList[i].firstarc;p!=null;p=p->nextarc){
if(visited[p->adjvex]==flase && existPath(G,p->adjvex,j,k-1)==true ){
return true;
}
visited[p->adjvex]=false;
}
return false;
}
}
/*判断有向图的邻接表中是否有Vi->Vj的路径
*/
void DFS(Graph G,int v){
ENode *p;
visited[v]=true;
visit(t);
p=G->adjList[v].firstarc;
while(p!=null){
if(visited[p->adjvex]==false){
DFS(G,p->adjvex);
}
p=p->nextarc;
}
}
bool visited[maxsize];
bool existPath(Graph G,int v,int j){
for(int i=0;i<G->vertices;i++){
visited[i]=false;
}
DFS(G,v);
if(visited[j]==false){
return false;
}else{
return true;
}
}
//邻接表 判断从u到v是否有简单路径,有则打印路径上的点
void printPath(Graph G,int u,int v,int path[]
,int d,bool &exist){//路径长度d
visited[u]=true;
d++;
path[d]=u;
if(u==v && d>0){
exist=true;
for(int i=0;i<d;i++){
printf("%d\n",path[i]);
}
return;
}
ENode *p=G.adjList[u].firstarc;
int w;
while(p!=null){
w=p->adjvex;
if(visited[w]==false){
printPath(G,w,v,path,d,exist);
}
p=p->nextarc;
}
}
//打印全部简单路径
void Allpath(Graph G,int u,int v,int path[],int d){//路径长度
d++;
path[d]=u;
visited[u]=true;
if(u==v && d>0){
for(int i=0;i<d;i++){
printf("%d\n", path[i]);
}
printf("\n");
}
ENode *p=G.adjList[u];
int w;
while(p!=null){
w=p->adjvex;
if(visited[w]==false){
Allpath(G,w,v,path,d);
}
p=p->nextarc;
}
visited[u]=false;
}