试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点a到顶点b的路径,注意a!=b(必须严格按照样例进行输入输出,先输入图的顶点数和弧数,并依次输入弧的相关信息,最后输入要判断的两个顶点的信息)
样例如下:
输入:
5 4
2 4
2 1
1 3
3 0
2 0
输出:连通
文章来源:https://www.toymoban.com/news/detail-551209.html
文章来源地址https://www.toymoban.com/news/detail-551209.html
#include<stdio.h>
#include<stdlib.h>
#define MAXVEX 10
#define OK 1
#define Error 0
typedef int status;
typedef int VertexType;
typedef struct EdgeNode {
int adjvex;
struct EdgeNode* next;
}EdgeNode;
typedef struct VertexNode {
VertexType date;
EdgeNode* firstedge;
}VertexNode,AdjList[MAXVEX];
typedef struct {
AdjList adjList;
int numnodes, numedge;
}GraphAjList;
status creatGAL(GraphAjList& G) {
int i, j;
scanf_s("%d%d", &G.numnodes, &G.numedge);
EdgeNode* e;
for (int i = 0; i < G.numnodes; i++) {
G.adjList->date = i;
G.adjList->firstedge = NULL;
}
for (int i = 0; i < G.numedge; i++) {
scanf_s("%d%d", &i, &j);
e = (EdgeNode*)malloc(sizeof(EdgeNode));
e->adjvex = j;
e->next = G.adjList[i].firstedge;
G.adjList[i].firstedge = e;
}
return OK;
}//邻接链表创建有向图
status DFS(GraphAjList G,int node1,int node2) {
EdgeNode* p;
p = G.adjList[node1].firstedge;
while (p) {
if (p->adjvex != node2)
DFS(G, p->adjvex, node2);
if (p->adjvex == node2)
printf("连通");
return OK;
}
printf("不连通");
return OK;
}//深度遍历有向图
int main() {
GraphAjList G;
creatGAL(G);
int node1, node2;
scanf_s("%d%d", &node1, &node2);
DFS(G,node1,node2);
return 0;
}
到了这里,关于试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点a到顶点b的路径的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!