采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。
以邻接表存储的有向图中是否存在有顶点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的简单路径的算法。相关推荐
- 基于广度优先遍历算法求采用邻接表存储的无向连通图G中从顶点u到v的最短路径
问题 假设图G采用邻接表存储,设计一个算法,求不带权无向连通图G中从顶点u->v的最短路径(路径上经过的顶点数最少.采用广度优先遍历来实现. 基本思路 我们首先来看一下BFS的过程: 图片摘自慕 ...
- 图采用邻接表存储,设计一个算法,判断顶点i和顶点j(i!=j)之间是否有路径
算法思想:只要以i为起点,进行遍历,只要遍历过程中遇到了j,就证明有路径. 算法代码 int DFSTravel(AGraph *G,int i,int j) {int k;for(k=0;k< ...
- 4014-基于邻接表的长度为k的简单路径的求解(C++,附思路)
描述 一个连通图采用邻接表作为存储结构.设计一个算法,判断无向图中任意给定的两点是否存在一条长度为k的简单路径. 输入 多组数据,每组m+3数据行.第一行有两个数字n,m和k,代表有n个顶点,m条边和 ...
- 4014基于邻接表的长度为k的简单路径的求解
描述 一个连通图采用邻接表作为存储结构.设计一个算法,判断无向图中任意给定的两点是否存在一条长度为k的简单路径. 输入 多组数据,每组m+3数据行.第一行有两个数字n,m和k,代表有n个顶点,m条边和 ...
- 一个图的带权邻接表存储结构的应用
情景:在一个图中,已知经过的一串n节点信息,希望显示经过的路径. 数据组织: 点要素:存放图中的点信息,必含Id字段 线要素:存放编辑好的路径信息,必含"Start"和" ...
- 邻接表1试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc,相关定义如下:icoding---算法改进--配详细注释
邻接表1 试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc,相关定义如下: typedef int VertexType; typedef enum{DG, ...
- 采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径。设计算法,将一个无向图的邻接矩阵转换为邻接表。
采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径.设计算法,将一个无向图的邻接矩阵转换为邻接表. 采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径. 设计算法,将一个无向图的邻 ...
- 邻接表2 -试在邻接表存储结构上实现图的基本操作 del_vertex-数据结构-图-icoding
邻接表2 试在邻接表存储结构上实现图的基本操作 del_vertex,相关定义如下: typedef int VertexType;typedef enum{DG, UDG }GraphType;ty ...
- 邻接表1 - 试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc-数据结构-图-icoding
邻接表1 试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc,相关定义如下: typedef int VertexType;typedef enum{DG, U ...
最新文章
- 差分阻抗为多少_谈谈差分信号
- SpringBoot集成Spring Security —— 第二章自动登录
- 事件查看器ID 1041
- tvar julia pca_景德镇品种多样PCA牛卡纸追求品质
- BZOJ 3362 Navigation Nightmare 带权并查集
- java 作业调度_Java使用quartz实现作业调度
- 生成用于ASP.NET Web API的C#客户端API
- python websocket django vue_Django资料 Vue实现网页前端实时反馈输出信息
- hive-metastore
- vmware下虚拟机不能上网问题解决
- ModelSim之命令行仿真入门
- 微信一键激活 设置开卡字段
- Android 使用Notification进行消息提示
- vb.net图书管理系统
- 网易2018校招数据分析师笔试答案作答
- 计算机连接打印机用户数量修改,win7系统下局域网如何限制每台打印机的使用成员数量...
- excel空白处自动填充内容怎么操作,excel空白处填充0或上行方法
- vlookup java_Vlookup的VBA错误处理
- 采用TWH9248/9249的微波探测自动照明灯a
- 六个在线生成网址二维码的API接口
热门文章
- springcloud全局过滤_微服务技术SpringCloud 互联网网站架构演变过程
- php json对象取数据类型,PHP如何科学地json_encode类对象数据
- mac brew 安装_无用技能之 Mac 安装relion 步骤
- [BZOJ 2839] 集合计数
- Docker 运行的 应用程序无法连接Oracle数据库的解决办法
- “云时代架构”经典文章阅读感想十二
- C语言进阶--Day2
- 题解报告:hdu 5695 Gym Class(拓扑排序)
- LOJ#6281. 数列分块入门 5
- Linux Hbase1.2.6 安装及使用(1)