C++中如何求邻接矩阵中某一个顶点的最远邻接点
时间: 2024-03-25 16:39:46 浏览: 63
邻接矩阵C++代码
5星 · 资源好评率100%
假设邻接矩阵为 $adj$,要求顶点 $v$ 的最远邻接点,可以采用广度优先搜索(BFS)的方法。具体步骤如下:
1. 初始化一个队列 $q$,将顶点 $v$ 入队;
2. 初始化一个数组 $dist$,表示每个顶点到顶点 $v$ 的距离,默认值为 $-1$,表示不可达。将 $dist[v]$ 的值设为 $0$;
3. 从队列 $q$ 中取出一个顶点 $u$,枚举与 $u$ 相邻的顶点 $w$,如果 $dist[w]$ 的值为 $-1$,表示 $w$ 未被访问过,将 $w$ 入队,并将 $dist[w]$ 的值设为 $dist[u]+1$;
4. 重复步骤 3,直到队列 $q$ 为空;
5. 枚举所有顶点 $u$,找到 $dist[u]$ 的最大值,即为顶点 $v$ 的最远邻接点。
以下是 C++ 代码实现:
```cpp
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
const int N = 100;
int adj[N][N]; // 邻接矩阵
int dist[N]; // 到起点的距离
int bfs(int n, int v)
{
memset(dist, -1, sizeof dist); // 初始化
queue<int> q;
q.push(v);
dist[v] = 0;
while (!q.empty())
{
int u = q.front();
q.pop();
for (int i = 0; i < n; i++)
{
if (adj[u][i] && dist[i] == -1) // i 与 u 相邻且未被访问过
{
q.push(i);
dist[i] = dist[u] + 1;
}
}
}
int max_dist = -1;
for (int i = 0; i < n; i++)
{
if (dist[i] > max_dist)
{
max_dist = dist[i];
}
}
return max_dist;
}
int main()
{
int n, v;
cin >> n >> v;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> adj[i][j];
}
}
int max_dist = bfs(n, v);
cout << max_dist << endl;
return 0;
}
```
阅读全文