在邻接矩阵存储结构下输出图G从顶点0开始的深度优先遍历序列、广度优先遍历序列
时间: 2024-01-22 11:17:58 浏览: 72
建立图的邻接矩阵或邻接表存储并在此基础上实现图的深度优先遍历和广度优先遍历.doc
5星 · 资源好评率100%
假设邻接矩阵存储的图G的顶点数为n,邻接矩阵为adjMatrix。
深度优先遍历可以使用递归或栈来实现。下面给出使用栈的实现方式:
```
void DFS(int adjMatrix[][n], int visited[], int v) {
stack<int> s;
s.push(v);
visited[v] = 1;
while (!s.empty()) {
int cur = s.top();
cout << cur << " ";
s.pop();
for (int i = n-1; i >= 0; i--) {
if (adjMatrix[cur][i] == 1 && visited[i] == 0) {
visited[i] = 1;
s.push(i);
}
}
}
}
```
其中,visited数组用于记录每个顶点是否被访问过,初始值都为0。调用DFS函数时,传入adjMatrix和visited数组以及起始顶点0即可输出深度优先遍历序列。
广度优先遍历可以使用队列来实现。下面给出实现方式:
```
void BFS(int adjMatrix[][n], int visited[], int v) {
queue<int> q;
q.push(v);
visited[v] = 1;
while (!q.empty()) {
int cur = q.front();
cout << cur << " ";
q.pop();
for (int i = 0; i < n; i++) {
if (adjMatrix[cur][i] == 1 && visited[i] == 0) {
visited[i] = 1;
q.push(i);
}
}
}
}
```
同样地,visited数组用于记录每个顶点是否被访问过,初始值都为0。调用BFS函数时,传入adjMatrix和visited数组以及起始顶点0即可输出广度优先遍历序列。
阅读全文