//采用邻接表存储结构编写一个算法,判别无向图中任意给定的两个顶点之间是否存在长度为k的简单路径
typedef struct ArcNode{
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode{
int data;
ArcNode *firstarc;
}VNode,AdjList[100];
typedef struct{
AdjList vertices;
int vexnum,arcnum;
}AMGraph;
int exist_path_len(AMGraph,int i,int j,int k){
if(j=j&&k=0)return 1;// 如果存在长度为k的路径的话 最后一次递归调用一定走到这里的 比如找1-3长度为2的 1的下一个是2 递归调用时 此时的i是2到3长度为1 在调用一次 就是3到3 找到了 就一直返回1
else if(k>0){
visited[i]=1;//访问i结点
for(p=G.vertices[i].firstarc;p;p=p->nextarc){
l=p->adjvex;
if(!visited[l]){
if(exist_path_len(G,l,j,k-1)) return 1;
}
}
visited[i]=0;//本次路径没有找到的话 另一条路径还可以用
}
return 0;如果找到的话 会在中途就return1
}