建立一个有向图的邻接矩阵存储,然后在主函数中输出该二维矩阵(注意输出格式要为一个矩阵),以检验存储的正确性;再从0号顶点出发对该图进行深度优先搜索,按顺序输出所访问的顶点。 【输入形式】 顶点个数 边的条数 顶点数据 边 【输出形式】 二维矩阵 顶点序列
时间: 2025-01-04 08:38:29 浏览: 6
首先,让我们创建一个有向图的邻接矩阵来表示它。邻接矩阵是一个二维数组,其中行代表起点,列表示终点,值为1表示存在一条从起点到终点的边,0则表示没有连接。在这个例子中,我们将假设用户会提供顶点个数、边的数量以及每条边的具体信息。
```c++
#include <iostream>
using namespace std;
const int MAX_VERTICES = 100; // 设置最大顶点数
// 邻接矩阵结构
int adjacencyMatrix[MAX_VERTICES][MAX_VERTICES] = {0};
// 函数用于读取用户输入并填充邻接矩阵
void readGraph(int numVertices, int numEdges) {
for (int i = 0; i < numEdges; i++) {
int start, end;
cin >> start >> end;
adjacencyMatrix[start][end] = 1; // 从start到end有一条边
}
}
// 深度优先搜索函数
void dfs(int vertex) {
cout << vertex << " "; // 访问的顶点输出
for (int i = 0; i < MAX_VERTICES; i++) {
if (adjacencyMatrix[vertex][i] && !visited[i]) {
visited[i] = true; // 标记已访问
dfs(i); // 递归访问邻居
}
}
}
int main() {
int numVertices, numEdges;
cout << "请输入顶点个数和边的条数:" << endl;
cin >> numVertices >> numEdges;
// 填充邻接矩阵
readGraph(numVertices, numEdges);
// 输出邻接矩阵
cout << "邻接矩阵:\n";
for (int i = 0; i < numVertices; i++) {
for (int j = 0; j < numVertices; j++) {
if (adjacencyMatrix[i][j] == 1)
cout << "1 ";
else
cout << "0 ";
}
cout << "\n";
}
// 初始化访问标记
bool visited[MAX_VERTICES] = {false};
visited[0] = true; // 从0号顶点开始DFS
// 开始深度优先搜索
dfs(0);
cout << "\n深度优先搜索路径(从0号顶点开始):";
return 0;
}
```
当你运行这个程序,它会提示你输入顶点数和边的信息,随后会打印出邻接矩阵,并从0号顶点开始执行深度优先搜索,最后显示访问的顶点序列。
阅读全文