//基于图的深度优先搜索(邻接表)
#include <stdio.h>
#include <stdlib.h>
#define max 200
typedef struct arcnode{ //arc弧, 边表
int adjvex; //该弧指向的节点(adj 邻域)
// int weight; //权重
struct arcnode *next; //同一节点下一条边
}arcnode;
typedef struct vnode{ //节点表
int data; //节点信息????
arcnode *firstarc; //第一条边
}vnode,adjlist;
typedef struct{
adjlist vertices[max]; //邻接表
int vexnum,arcnum; //顶点数,边数
}algraph;
void InitAlgraph(algraph *G){
for(int i = 0;i < max;i++)
{
G->vertices[i].data = 0;
G->vertices[i].firstarc = NULL;
}
scanf("%d %d",&G->arcnum,&G->vexnum);
for(int i = 1;i <= G->arcnum;i++)
{
scanf("%d",&G->vertices[i].data);
}
arcnode *p;
for(int i = 1;i <= G->vexnum; i++)
{
int vi,vj;
scanf("%d %d",&vi,&vj);
p = (arcnode*)malloc(sizeof(arcnode));
p->adjvex = vj;
p->next = G->vertices[vi].firstarc;
G->vertices[vi].firstarc = p;
}
}
int dfs(int vi,int vj,algraph *G){
arcnode *p;
p = G->vertices[vi].firstarc;
while(p != NULL)
{
if(p->adjvex == vj)
{
return 1;
}
else if(dfs(p->adjvex,vj,G) == 1)
{
return 1;
}
else
{
p = p->next;
}
}
return -1;
}
int main(){
algraph g;
InitAlgraph(&g);
int vi,vj;
scanf("%d %d",&vi,&vj);
int flag = dfs(vi,vj,&g);
if(flag==1)
printf("yes");
else
printf("no");
return 0;
}
noj19 基于图的深度优先搜索策略
最新推荐文章于 2022-05-12 19:50:12 发布