用c++写一个代码实现1.建立无向图的邻接矩阵存储并输出。 2.建立图的邻接表存储并在此基础上实现图的深度优先遍历和广度优先遍历。
时间: 2024-05-09 11:16:00 浏览: 104
1. 建立无向图的邻接矩阵存储并输出
```c++
#include <iostream>
using namespace std;
const int MAXN = 100;
int graph[MAXN][MAXN]; // 邻接矩阵
int main() {
int n, m; // n 个节点,m 条边
cin >> n >> m;
// 初始化邻接矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
graph[i][j] = 0;
}
}
// 读入每一条边
for (int i = 0; i < m; i++) {
int u, v; // u 和 v 之间有一条边
cin >> u >> v;
graph[u][v] = graph[v][u] = 1; // 无向图
}
// 输出邻接矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << graph[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
2. 建立图的邻接表存储并在此基础上实现图的深度优先遍历和广度优先遍历
```c++
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int MAXN = 100;
vector<int> adj[MAXN]; // 邻接表
bool visited[MAXN]; // 标记每个节点是否已被访问
// 深度优先遍历
void dfs(int u) {
cout << u << " ";
visited[u] = true;
for (int v : adj[u]) {
if (!visited[v]) {
dfs(v);
}
}
}
// 广度优先遍历
void bfs(int u) {
queue<int> q;
q.push(u);
visited[u] = true;
while (!q.empty()) {
int u = q.front();
q.pop();
cout << u << " ";
for (int v : adj[u]) {
if (!visited[v]) {
q.push(v);
visited[v] = true;
}
}
}
}
int main() {
int n, m; // n 个节点,m 条边
cin >> n >> m;
// 初始化邻接表
for (int i = 0; i < n; i++) {
adj[i].clear();
visited[i] = false;
}
// 读入每一条边
for (int i = 0; i < m; i++) {
int u, v; // u 和 v 之间有一条边
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u); // 无向图
}
// 从节点 0 开始进行深度优先遍历
cout << "Depth First Search: ";
dfs(0);
cout << endl;
// 重新初始化 visited 数组
for (int i = 0; i < n; i++) {
visited[i] = false;
}
// 从节点 0 开始进行广度优先遍历
cout << "Breadth First Search: ";
bfs(0);
cout << endl;
return 0;
}
```
阅读全文