在递归深度遍历的基础上进行修改的
和网上的算法不太一样,个人感觉我这个好理解一点,当然这个也因人而异。
typedef struct Vnode{
char vex;
Arcnode *first;
} //定义顶点结构
typedef struct Arcnode{
int adj;
struct Arcnode *next
} //定义边节点结构
typedef struct {
Vnode vexs[num];
int vexsnum,arcnum;//vexsnum 为顶点个数,arcnum为边个数
}G //定义图
int n=0; //n为路径长度
int visit[vexsnum];
G g;
for(i=0;i<vexsnum;i++)
visit[i]=0;
for(i=0;i<vexsnum;i++)
{
DFS(g,i)
{
visit[i]=1;
p=g.vexs[i].first;
w=p->adj;
while(p)
{
if(p&&visit[w]!=1)
{
n++;
if(n==k)
return 1;
DFS(g,w)
}
p=p->next;
if(p=null)
n=0;//每一段路径走完之后清零,重新计数
}
}
}