采用C++语言,实现采用邻接矩阵存储结构 基本要求:(1)对任意给定的图(顶点数和边数自定),建立它的邻接矩阵并输出;(2)实现图的深度优先搜索遍历。
时间: 2025-02-23 10:32:05 浏览: 29
在C++中,我们可以使用二维数组或动态数组来实现邻接矩阵。对于图的邻接矩阵表示法,每个元素a[i][j]代表从顶点i到顶点j是否有边连接。如果存在边,则值为1或true,否则为0或false。
以下是简单的步骤:
1. 定义一个二维布尔型数组adjMatrix,其大小为顶点数*顶点数。
2. 创建函数`initAdjMatrix(int vertices)`来初始化邻接矩阵,输入顶点数,所有内部元素设为false,表示默认无边。
3. 使用`addEdge(int src, int dest)`函数添加边,将adjMatrix[src][dest]设置为true。
```cpp
#include <iostream>
using namespace std;
// 图的顶点数
int V;
// 邻接矩阵
bool adjMatrix[V][V];
// 添加边
void addEdge(int src, int dest) {
adjMatrix[src][dest] = true; // 如果从src到dest有边,则邻接矩阵对应位置设为true
}
// 深度优先搜索遍历
void dfsUtil(int vertex, bool visited[]) {
// 标记当前节点已访问
visited[vertex] = true;
cout << vertex << " ";
// 对于矩阵中所有邻居,如果未访问,递归进行DFS
for (int i = 0; i < V; ++i)
if (adjMatrix[vertex][i] && !visited[i])
dfsUtil(i, visited);
}
// 主函数,接受边数和顶点数,初始化矩阵,添加边,然后进行深度优先搜索
void depthFirstSearch(int edges, int graph[]) {
V = sizeof(graph)/sizeof(graph[0]); // 获取顶点数
bool *visited = new bool[V]; // 记录已访问节点
for (int i = 0; i < V; i++) {
visited[i] = false;
adjMatrix[i][i] = false; // 自环标记为false
}
// 添加边
for (int i = 0; i < edges; i++) {
int src = graph[2*i], dest = graph[2*i+1];
addEdge(src, dest);
}
// 开始深度优先搜索
for (int i = 0; i < V; i++)
if (!visited[i])
dfsUtil(i, visited);
delete[] visited; // 释放内存
}
int main() {
int edges; // 边的数量
// 输入顶点数和边的信息...
depthFirstSearch(edges, graph); // 图的边的存储方式(如无向图可以为graph[i] = [src, dest])
return 0;
}
```
阅读全文
相关推荐

















