采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。
来源:互联网 发布:php判断会员登录 编辑:程序博客网 时间:2024/06/05 06:49
以邻接表存储的有向图中是否存在有顶点Vi到Vj顶点的路径(i!=j)。
问题描述:试基于图的深度优先搜索策略编写一程序,判别以邻接表存储的有向图中是否存在有顶点Vi到Vj顶点的路径(i!=j)。
输入:顶点个数,边数。顶点,边,要找的顶点i到j。
输出:若存在i到j路径,输出Exist the path,否则输出Not exist the path。
存储结构:邻接表存储结构。
算法基本思想:建立邻接表存储各顶点,边。然后深度优先搜索,用visited[i]作标志。
源程序:
#include "stdio.h"
#include "conio.h"
#define MAX_VERTEX_NUM 30
typedef struct ArcNode{
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
typedef struct VNode{
int data;
ArcNode *firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct{
AdjList vertices;
int vexnum,arcnum;
}ALGraph;
creat_DG_ALGraph(ALGraph *G){
int i,j,k;ArcNode *p;
p=NULL;
printf("Please input: vexnum ,arcnum=:");
scanf("%d,%d",&G->vexnum,&G->arcnum);
printf("Please input VNode:\n");
for(i=0;i<G->vexnum;i++)
{scanf("%d",&G->vertices[i].data);
G->vertices[i].firstarc=NULL;
}
for(i=0;i<G->vexnum;i++)
printf("%d ",G->vertices[i].data);
printf("\n");
for(k=0;k<G->arcnum;k++)
{p=(ArcNode*)malloc(sizeof(ArcNode));
printf("please input edge <i,j>: ");
scanf("%d,%d", &i, &j);
printf("\n");
p->adjvex = j;
p->nextarc=G->vertices[i].firstarc;
G->vertices[i].firstarc=p;
}
}
int exist_path_DFS(ALGraph G,int i,int j){
ArcNode *p;
int k,visited[MAX_VERTEX_NUM];
p=NULL;
if(i==j) return 1;
else {visited[i]=1;
for(p=G.vertices[i].firstarc;p;p=p->nextarc)
{k=p->adjvex;
if(!visited[k]&&exist_path_DFS(G,k,j));
}
}
}
main()
{ALGraph *G;
int i,j;
G=NULL;
creat_DG_ALGraph(G);
printf("Please input i->j you want to find:\n");
scanf("%d,%d",&i,&j);
if(exist_path_DFS(*G,i,j)) printf("Exist the path!");
else printf("Not exist the path");
getch();
}
- 采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。
- 判别无向图中任意给定的2个顶点之间是否存在一条长度 为k的简单路径
- 判别一个无向图中某两点之间是否存在一条长度为k的简单路径
- 判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(i≠j)
- 【Java】给定有向图,设计一个算法,找出两个结点之间是否存在一条路径
- 设计一个算法,采用BFS方式输出图G中从顶点u到v的最短路径(不带权的无向连通图G采用邻接表存储)
- 判断两个顶点之间是否联通,是否有长度为K的路径
- CSU 1660 K-Cycle(dfs判断无向图中是否存在长度为K的环)
- 程序员面试金典: 9.4树与图 4.2给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。
- 无向图寻找是否存在长度为k的环
- 弗洛伊德算法得到图中任意两个顶点之间的最短路径
- 无向图中求两个顶点间的所有路径算法
- 求有向网中任意一对顶点之间的最短路径 Floyd算法
- 无向图邻接表的存储结构
- 无向图的邻接多重表存储结构
- 无向网图的邻接表存储结构
- 数据结构--无向图的邻接多重表存储结构
- 在一个长度为n(n < 1000)的整数序列中,判断是否存在某两个元素之和为k。
- 微信公众平台开发C#实现
- Introduction to SSE Programming
- c++设计模式之观察者模式
- 疯狂 dp(一) 线性 dp
- 获得PHP环境系统信息
- 采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。
- CLOSE BY CLIENT STACK TRACE ,Unable to install breakpoint解决
- 小波变换
- 安装OpenCV Ubuntu官方指南
- 设计模式-简单工厂模式
- c函数之【记录函数】
- Java的package和import机制
- linux64位编译php遇到configure: error: GD build test failed. Please check the config.log for details
- centos 打开php错误提示 nginx+php,需要注意的问题