c++给定无向图的顶点数、边数、边的信息以及任意两顶点信息,判定该两顶点之间是否存在路径。X组测试数据,对于每组测试数据, 第一行输入顶点数N(N<=100),边数M,数据之间空格分隔; 第二行输入M条边的信息(v1 v2表示边的顶点),数据之间由空格分隔。 第三行输入两顶点信息。若两顶点之间存在路径,输出YES,否则输出NO。
时间: 2024-03-21 15:44:00 浏览: 43
这是一个比较基础的图论问题,可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来解决。
以下是使用DFS的解法:
```c++
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int MAXN = 100;
vector<int> graph[MAXN];
bool visited[MAXN];
void dfs(int v) {
visited[v] = true;
for (int i = 0; i < graph[v].size(); i++) {
int u = graph[v][i];
if (!visited[u]) {
dfs(u);
}
}
}
int main() {
int n, m;
cin >> n >> m;
memset(visited, false, sizeof(visited));
for (int i = 0; i < m; i++) {
int v1, v2;
cin >> v1 >> v2;
graph[v1].push_back(v2);
graph[v2].push_back(v1);
}
int v_start, v_end;
cin >> v_start >> v_end;
dfs(v_start);
if (visited[v_end]) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
return 0;
}
```
首先读入顶点数和边数,然后使用vector来存储图的邻接表。接着读入每条边的信息,并将其加入邻接表中。最后读入两个顶点,从起点开始进行DFS遍历,如果能到达终点,则输出YES,否则输出NO。
时间复杂度为O(N+M),空间复杂度为O(N+M)。
阅读全文