不用STL容器实现上述代码
时间: 2023-10-26 22:13:13 浏览: 112
好的,下面是一个不使用STL容器实现的代码示例:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 100005; // 最大节点数
int head[MAXN], nxt[MAXN << 1], ver[MAXN << 1], tot = 0; // 邻接表存储图
int dist[MAXN]; // 存储每个节点到起点的最短距离
bool vis[MAXN]; // 记录每个节点是否已经访问过
void add(int x, int y) { // 添加一条从x到y的边
ver[++tot] = y;
nxt[tot] = head[x];
head[x] = tot;
}
void bfs(int s) {
memset(dist, -1, sizeof(dist)); // 初始化dist数组为-1
dist[s] = 0;
vis[s] = true;
int q[MAXN], hh = 0, tt = 0; // 队列
q[0] = s;
while (hh <= tt) {
int u = q[hh++];
for (int i = head[u]; i; i = nxt[i]) {
int v = ver[i];
if (!vis[v]) {
dist[v] = dist[u] + 1;
vis[v] = true;
q[++tt] = v;
}
}
}
}
int main() {
int n, m; // n是节点数,m是边数
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v;
add(u, v);
add(v, u);
}
int s, t; // 起点和终点
cin >> s >> t;
bfs(s);
cout << dist[t] << endl;
return 0;
}
```
该示例代码与上一个示例代码的思路相同,只是使用数组实现了邻接表和队列,避免了STL容器的使用。
阅读全文