赋权图的深度优先遍历C++
时间: 2023-05-22 17:03:18 浏览: 91
以下是一个基本的深度优先遍历的赋权图算法的示例:
```c
#include <stdio.h>
#define MAX_VERTICES 100
// 定义节点和边结构体
typedef struct {
int vertice_start; // 起始节点编号
int vertice_end; // 终止节点编号
int weight; // 权值
} edge_t;
int num_vertices; // 节点数量
int num_edges; // 边数量
edge_t edges[MAX_VERTICES]; // 存储边信息的数组
int visited[MAX_VERTICES]; // 用来表示每个节点是否被访问过
// DFS 函数
void dfs(int vertice) {
visited[vertice] = 1; // 标记当前节点为已访问
printf("节点 %d 被访问了\n", vertice);
int i;
for (i = 0; i < num_edges; i++) {
// 找到所有与当前节点连通的边
if (edges[i].vertice_start == vertice) {
int next_vertice = edges[i].vertice_end;
if (!visited[next_vertice]) {
// 如果这个节点还没有被访问过,那就递归访问它
dfs(next_vertice);
}
}
}
}
int main() {
// 假设有以下这个赋权图
// [0] ---(5)--- [1]
// | / |
// (10) (1) (6)
// | / |
// [2] ---(3)--- [3]
// 节点编号从 0 开始
num_vertices = 4;
num_edges = 5;
edges[0] = (edge_t) {0, 1, 5};
edges[1] = (edge_t) {0, 2, 10};
edges[2] = (edge_t) {1, 3, 6};
edges[3] = (edge_t) {2, 3, 3};
edges[4] = (edge_t) {1, 2, 1};
// 初始化 visited 数组
int i;
for (i = 0; i < num_vertices; i++) {
visited[i] = 0;
}
// 从节点 0 开始进行 DFS 遍历
dfs(0);
return 0;
}
```
如果您有任何其他问题,我会尽力回答它们!
阅读全文