c++邻接矩阵深度优先遍历
时间: 2024-06-04 10:05:47 浏览: 111
邻接矩阵是一种表示图结构的方法,深度优先遍历是一种基本的图遍历算法。在C++中,我们可以使用邻接矩阵来表示图结构,并通过深度优先遍历对其进行遍历。
具体实现方式如下:
1. 定义邻接矩阵
我们可以使用一个二维数组来表示邻接矩阵,其中第i行第j列的元素表示节点i与节点j之间是否存在边。如果存在边,则为1,否则为0。例如:
```
int graph[10][10] = {
{0, 1, 1, 0, 0, 0, 0, 0, 0, 0},
{1, 0, 0, 1, 1, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 1, 1, 0, 0, 0},
{0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
{0, 1, 0, 0, 0, 0, 0, 1, 1, 1},
{0, 0, 1, 0, 0, 0, 0, 0, 1, 0},
{0, 0, 1, 0, 0, 0, 0, 0, 1, 0},
{0, 0, 0, 1, 1, 0, 0, 0, 0, 1},
{0, 0, 0, 0, 1, 1, 1, 0, 0 ,1},
{0, 0, 0 ,0 ,1 ,0 ,0 ,1 ,1 ,0}
};
```
2. 定义深度优先遍历函数
深度优先遍历可以使用递归实现,我们定义一个递归函数来实现深度优先遍历。该函数首先访问当前节点,并将其标记为已访问。然后递归访问与当前节点相邻的所有未访问的节点。例如:
```
void DFS(int node, bool visited[], int graph[][10], int size) {
visited[node] = true; // 标记节点为已访问
cout << node << " "; // 输出当前节点
for(int i=0; i<size; i++) {
if(graph[node][i] && !visited[i]) { // 如果节点i与当前节点相邻且未访问
DFS(i, visited, graph, size); // 继续递归访问节点i
}
}
}
```
3. 调用深度优先遍历函数
我们可以从任意一个节点开始进行深度优先遍历,只需传入该节点的编号即可。例如:
```
int main() {
int graph[10][10] = {...};
bool visited[10] = {false}; // 初始化所有节点为未访问
DFS(2 /*从节点2开始遍历*/, visited, graph /*邻接矩阵*/, sizeof(graph)/sizeof(graph)); // 调用深度优先遍历函数
return 0;
}
```
阅读全文