6-2 两顶点之前有路径吗?
6-2 两顶点之前有路径吗? (20 分)
对于给定的无向图及两个图中的顶点,请实现一个函数,分别打印包含这两个顶点的连通分量中的顶点数,并判断这两个顶点之间是否有路径。
函数接口定义:
int hasPath(struct Graph *g, int v, int w);
其中v和w是顶点
图定义如下:
#define MaxVertexNum 20 /* 最大顶点数 */
struct Graph{int v; /* 顶点数量 */int Adj[MaxVertexNum][MaxVertexNum]; /* 邻接矩阵 */
};
题目保证图至少有一个顶点
函数分别在第一行和第二行打印包含v和w的连通分量中顶点的数量。
如果 v和w之间有路径,函数返回1, 否则返回0.
提示:
你可以定义多个函数,也可以定义全局变量.
当v和w是同一个顶点时,认为v和w之间是有路径的。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
#define MaxVertexNum 20 /* 最大顶点数设为20 */
struct Graph{int v; // amount of verticesint Adj[MaxVertexNum][MaxVertexNum]; /* 邻接矩阵 */
};
int visited[MaxVertexNum]; /* 顶点的访问标记 */
struct Graph* CreateGraph(){int v;scanf("%d",&v);struct Graph* g;g = malloc(sizeof(struct Graph));if(!g) return NULL;g->v = v;for(int i=0; i<v; i++){visited[i] = 0;for(int j=0; j<v; j++)scanf("%d",&(g->Adj[i][j]));}return g;
}
int hasPath(struct Graph *g, int v, int w);
int main(){struct Graph* g;g = CreateGraph();int v,w;scanf("%d%d", &v, &w);printf("%s\n", hasPath(g,v,w) ? "Yes" : "No");return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
对于此图及样例测试程序规定的输入格式:
8
0 1 1 0 0 0 0 1
1 0 0 0 1 0 0 0
1 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
0 1 1 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0
1 3
结尾无空行
Sample Output:
5
2
No
结尾无空行
C(gcc)
int F = 0;
int hasPath(struct Graph* g, int v, int w)
{int q[1000];int l = 0, r = 0, t;visited[v] = 1;q[r++] = v;while (l < r){t = q[l++]; if (t == w) { F = 1; break; }for (int i = 0; i < g->v; i++){if (g->Adj[t][i] && visited[i] == 0){q[r++] = i; visited[i] = 1;}}}travel(g, v);travel(g, w);return F;
}
void travel(struct Graph* g, int v)// BFS统计连通分量顶点个数
{for (int i = 0; i < g->v; i++)visited[i] = 0;//清空搜索记录int q[1000];int l = 0, r = 0, c = 0, t;visited[v] = 1;q[r++] = v;while (l < r){t = q[l++]; c++;for (int i = 0; i < g->v; i++){if (g->Adj[t][i] && visited[i] == 0){q[r++] = i; visited[i] = 1;}}}printf("%d\n", c);
}
6-2 两顶点之前有路径吗?相关推荐
- 两顶点的路径长度为k_计算两个顶点之间的所有可能路径
两顶点的路径长度为k What to Learn? 学什么? How to count all possible paths between two vertices? 如何计算两个顶点之间的所有可能 ...
- BJFU_数据结构习题_284基于深度优先搜索的两顶点路径存在与否的判断
欢迎登录北京林业大学OJ系统 http://www.bjfuacm.com 284基于深度优先搜索的两顶点路径存在与否的判断 描述 设计一个算法,试基于深度优先搜索判断以邻接表方式存储的有向图中是否存 ...
- 4013基于深度优先搜索的两顶点路径存在与否的判断
描述 设计一个算法,试基于深度优先搜索判断以邻接表方式存储的有向图中是否存在由顶点vi 输入 多组数据,每组m+3数据行.第一行有两个数字n和m,代表有n个顶点和m条边.第二行有n个字符,代表n个顶点 ...
- php算出文件相对路径,php计算两个文件相对路径的方法
本文实例讲述了php计算两个文件相对路径的方法.分享给大家供大家参考.具体如下: 一.问题: 写一个php函数算出两个文件的相对路径.例如$a="/a/b/c/d/e.php"; ...
- java两个文件夹比较路径_比较Java中两个文件的路径
java两个文件夹比较路径 Given the paths of the two files and we have two compare the paths of the files in Jav ...
- 4013-基于深度优先搜索的两顶点路径存在与否的判断(C++,附详细思路)
描述 设计一个算法,试基于深度优先搜索判断以邻接表方式存储的有向图中是否存在由顶点vi 输入 多组数据,每组m+3数据行.第一行有两个数字n和m,代表有n个顶点和m条边.第二行有n个字符,代表n个顶点 ...
- 将两个文件的路径作为参数传递给脚本_将Docker与pipeline一起使用
许多组织使用Docker统一其跨机器的构建和测试环境,并提供一种用于部署应用程序的有效机制.从Pipeline 2.5及更高版本开始,Pipeline内置支持从内与Docker进行交互 Jenkins ...
- Win10两个开始菜单路径
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\ 这个路径中的是公用的,也就是电脑上多个用户都可以正常看见. C:\Users\Lenovo\ ...
- 数据结构-迪杰斯特拉,佛洛依德(两顶点之间可到达的最短距离)
说来很惭愧,有个兄弟找我做了一道图的生成树题目我把题目给看错了,给看作求最小两点之间的可到达最短距离,本来题目意思是求任意两个村庄之间可以互通的最小资金花费,,,,我都不知道怎么看成了两点之间的最短路 ...
- 同一数据库在两台机上不同路径的备份还原
在做数据库复制或BI商业分析时,我们经常遇到这样的问题,同一数据库在A服务器上是一个路径(如:D:\database),在B服务器上的路径不同(D:\sqlserver data). 如果用手工在企业 ...
最新文章
- 从源码分析DEARGUI之add_listbox
- c语言字符串 数字转换函数大全
- iOS基础网络教程-Swift版本: 1.基础网络概括
- ES6中新增字符串方法,字符串模板
- java puzzler_Java Puzzler学习笔记
- 第九章 国际化、帮助系统和Qt插件
- ajax get 不会缓存,ajax的get请求时缓存处理解决方法
- python中函数的名称可以随意命名吗_函数的名称可以随意命名。(3.0分)_学小易找答案...
- 替代left join方法_你应该使用pathlib替代os.path
- 图扑数字孪生青岛城轨,赋能智慧交通低碳发展
- 超搞笑,超拽的句子...
- C语言 文件合成器代码(用图片掩盖.rar文件)
- matlab fpga 移植,使用MATLAB,Simulink以及基于模型的设计实现把电机控制算法移植到Zynq平台...
- 计算机中的速率、带宽、时延、利用率解读
- 阿里云视觉智能平台高校学生专访|臧家河:疫情在家,我的视觉AI实践之旅
- 祝贺|蚂蚁金服技术人许寄入选2018 MIT TR 35全球榜单
- 人工智能学习笔记20221008
- 宇视设备搜索工具_【聚焦】2019版中国纸箱行业供应商搜索引擎、全球瓦楞行业设备前沿技术报告将于4月瓦楞展现场首发!...
- BDE, dbGo, dbExpress的抉擇
- 查看移动光猫配置文件