邻接矩阵中实现任意两个节点间的所有路径的显示,并显示每个路径的边总数,同时指示边数量最长路径和边最短路径 c++
时间: 2024-04-30 13:21:02 浏览: 7
以下是实现任意两个节点间的所有路径的显示,并显示每个路径的边总数,同时指示边数量最长路径和边最短路径的C++代码:
```c++
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int MAXN = 100;
int n, m;
int g[MAXN][MAXN];
bool vis[MAXN];
vector<int> path; // 存储当前路径
// 深度优先搜索
void dfs(int u, int v, int len) {
if (u == v) { // 找到一条路径
cout << "Path: ";
for (int i = 0; i < path.size() - 1; i++)
cout << path[i] << "->";
cout << path[path.size() - 1] << ", Length: " << len << endl;
return;
}
vis[u] = true;
path.push_back(u);
for (int i = 0; i < n; i++) {
if (!vis[i] && g[u][i]) // 搜索相邻未访问节点
dfs(i, v, len + 1);
}
vis[u] = false;
path.pop_back();
}
int main() {
memset(g, 0, sizeof(g));
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
g[u][v] = g[v][u] = 1;
}
int shortest = MAXN, longest = -1;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
memset(vis, false, sizeof(vis));
path.clear();
dfs(i, j, 0);
if (shortest > path.size()) shortest = path.size(); // 更新最短路径长度
if (longest < path.size()) longest = path.size(); // 更新最长路径长度
}
}
cout << "Shortest Path: " << shortest - 1 << ", Longest Path: " << longest - 1 << endl;
return 0;
}
```
该代码使用邻接矩阵存储图,使用深度优先搜索遍历图,找到任意两个节点间的所有路径,并计算每条路径的长度。在每次搜索完成后,更新最短路径和最长路径的长度。需要注意的是,最短路径和最长路径的长度都需要减去1,因为路径的长度等于边的数量减去1。