建立一个无向图,采用邻接矩阵做存储结构pta
时间: 2024-01-30 09:18:08 浏览: 109
好的,那么您需要先确定图的节点数和边数,然后才能开始构建邻接矩阵。
假设有 $n$ 个节点和 $m$ 条边,我们可以先创建一个 $n \times n$ 的矩阵,初始值全部为 0。然后对于每一条边 $(u,v)$,我们将矩阵中第 $u$ 行第 $v$ 列和第 $v$ 行第 $u$ 列的值设为 1,表示这两个节点之间有一条边。
下面是一个简单的 C++ 代码示例:
```cpp
const int N = 100; // 最大节点数
int n, m;
int g[N][N]; // 邻接矩阵
int main() {
// 读入节点数和边数
cin >> n >> m;
// 构建邻接矩阵
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
g[u][v] = g[v][u] = 1;
}
// 输出邻接矩阵
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cout << g[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
希望这能帮到您,如果您还有其他问题,可以继续问我哦。
相关问题
邻接矩阵存储图的深度优先遍历pta
### 使用邻接矩阵存储图并进行深度优先遍历
对于使用邻接矩阵存储图并执行深度优先遍历的操作,在处理过程中,主要涉及两个方面:一是构建邻接矩阵表示的图结构;二是基于该结构实施DFS(Depth First Search)。通过这种方式可以有效地探索所有节点及其连接情况。
#### 构建邻接矩阵
假设有一个无向图G=(V,E),其中V代表顶点集合而E则为边集。为了创建一个大小为n×n(n=|V|)的邻接矩阵`adjMatrix`用于描述此图:
- 如果存在一条由i指向j的边,则设置`adjMatrix[i][j]=1`(或权重w_ij);
- 否则设其等于0;
当涉及到有权重的情况时,可以用具体的权值代替上述条件中的1[^3]。
```cpp
// 初始化 n*n 的零矩阵作为邻接矩阵
vector<vector<int>> adjMatrix(n, vector<int>(n, 0));
```
#### 深度优先遍历实现
一旦有了邻接矩阵形式的地图表达方式之后,就可以着手编写递归版本或是迭代版式的DFS算法了。这里给出一种常见的递归方法来完成这项工作:
```cpp
void DFS(int v, bool visited[], const vector<vector<int>>& adjMatrix){
cout << "Visited vertex: " << v << endl;
visited[v] = true;
for (int i = 0; i < adjMatrix.size(); ++i){
if (!visited[i] && adjMatrix[v][i]){
DFS(i, visited, adjMatrix);
}
}
}
```
这段代码定义了一个名为`DFS`的过程接收三个参数——起始访问结点编号v、布尔型数组标记哪些结点已被访问过以及传入之前建立好的邻接矩阵。每当遇到未被访问过的相邻结点就调用自己继续深入下去直到不能再前进为止。
#### 完整示例程序
下面提供一段完整的C++代码片段展示如何初始化数据结构、填充测试案例的数据,并最终启动一次从特定起点出发的深度优先搜索过程。
```cpp
#include <iostream>
#include <vector>
using namespace std;
void DFS(int v, bool visited[], const vector<vector<int>>& adjMatrix);
int main(){
int n = 5; // 假设有五个顶点
// 创建并初始化邻接矩阵
vector<vector<int>> adjMatrix(n, vector<int>(n, 0));
// 添加一些假定存在的边到我们的图中...
adjMatrix[0][1] = adjMatrix[1][0] = 1;
adjMatrix[0][2] = adjMatrix[2][0] = 1;
adjMatrix[1][3] = adjMatrix[3][1] = 1;
adjMatrix[2][4] = adjMatrix[4][2] = 1;
// 准备好记录已访问状态的空间
bool* visited = new bool[n];
fill_n(visited, n, false);
// 开始于第一个顶点
DFS(0, visited, adjMatrix);
delete[] visited;
return 0;
}
void DFS(int v, bool visited[], const vector<vector<int>>& adjMatrix){
cout << "Visited vertex: " << v << endl;
visited[v] = true;
for (int i = 0; i < adjMatrix.size(); ++i){
if (!visited[i] && adjMatrix[v][i]){
DFS(i, visited, adjMatrix);
}
}
}
```
图的创建pta邻接矩阵
给定一个无向图,可以使用邻接矩阵来表示图的结构。假设图有n个节点,我们可以使用一个n x n的矩阵A来表示图的邻接矩阵,其中A[i][j]表示节点i和节点j之间是否有边相连。如果节点i和节点j之间有边相连,则A[i][j] = 1,否则A[i][j] = 0。
下面是一个使用邻接矩阵创建图的示例代码:
```python
# 定义邻接矩阵
n = 4
adj_matrix = [[0] * n for _ in range(n)]
# 添加边
adj_matrix[0][1] = 1
adj_matrix[1][0] = 1
adj_matrix[1][2] = 1
adj_matrix[2][1] = 1
adj_matrix[2][3] = 1
adj_matrix[3][2] = 1
# 输出邻接矩阵
for i in range(n):
for j in range(n):
print(adj_matrix[i][j], end=" ")
print()
```
输出结果为:
```
0 1 0 0
1 0 1 0
0 1 0 1
0 0 1 0
```
其中,第i行第j列的数字表示节点i和节点j之间是否有边相连,0表示无边,1表示有边。例如,第0行第1列的数字1表示节点0和节点1之间有边相连,而第2行第3列的数字1表示节点2和节点3之间有边相连。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)