C语言版深度优先遍历算法子函数
时间: 2023-07-24 11:21:20 浏览: 65
以下是C语言实现的深度优先遍历算法子函数的示例代码:
```c
void DFS(int node, int visited[], int graph[][N])
{
visited[node] = 1; // 标记节点已访问
printf("%d ", node); // 输出节点值
for(int i = 0; i < N; i++)
{
if(graph[node][i] == 1 && visited[i] == 0) // 如果节点与当前节点相邻且未被访问过
{
DFS(i, visited, graph); // 递归访问相邻节点
}
}
}
```
其中,`node`表示当前访问的节点,`visited`为一个数组,记录节点是否已经被访问过,`graph`为邻接矩阵表示的图。在函数内部,首先将当前节点标记为已访问,并输出节点值。然后遍历与当前节点相邻的节点,如果该节点未被访问过,则递归访问它,直到所有相邻节点都被访问完毕。
相关问题
使用邻接矩阵的C语言深度优先遍历算法子函数
以下是使用邻接矩阵的C语言深度优先遍历算法子函数的示例代码:
```c
#define N 5 // 图中节点数
void DFS(int node, int visited[], int graph[][N])
{
visited[node] = 1; // 标记节点已访问
printf("%d ", node); // 输出节点值
for(int i = 0; i < N; i++)
{
if(graph[node][i] == 1 && visited[i] == 0) // 如果节点与当前节点相邻且未被访问过
{
DFS(i, visited, graph); // 递归访问相邻节点
}
}
}
```
其中,`graph`为一个二维数组,表示邻接矩阵。在函数内部,首先将当前节点标记为已访问,并输出节点值。然后遍历与当前节点相邻的节点,如果该节点未被访问过,则递归访问它,直到所有相邻节点都被访问完毕。
使用邻接矩阵的C语言广度优先遍历算法子函数
好的,以下是使用邻接矩阵的C语言广度优先遍历算法子函数:
```c
#define MAX_VERTEX_NUM 100
#define MAX_QUEUE_SIZE 100
int visited[MAX_VERTEX_NUM]; // 记录节点是否被访问过的数组
int Queue[MAX_QUEUE_SIZE]; // 队列
int front, rear;
// 邻接矩阵广度优先遍历函数
void BFS(MGraph G, int v) {
int i, j;
front = rear = -1;
printf("%c ", G.vexs[v]); // 访问起点v
visited[v] = 1;
Queue[++rear] = v; // 起点v入队
while (front != rear) { // 队列不为空
i = Queue[++front]; // 队头元素出队并访问
for (j = 0; j < G.vexnum; j++) {
if (G.arcs[i][j] != 0 && !visited[j]) { // 有边且未被访问
printf("%c ", G.vexs[j]); // 访问相邻节点j
visited[j] = 1;
Queue[++rear] = j; // 相邻节点j入队
}
}
}
}
```
其中,`MGraph`结构体是邻接矩阵存储方式的图的存储结构:
```c
typedef struct {
char vexs[MAX_VERTEX_NUM]; // 顶点集合
int vexnum, arcnum; // 顶点数和边数
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
} MGraph;
```
`visited`数组用于记录节点是否被访问过,初始时所有元素都为0,表示所有节点都未被访问过。`Queue`数组用于存放已经访问过但相邻节点还未访问的节点,初始时队列为空。
在广度优先遍历中,首先访问起点`v`,并将其入队。然后从队列头部取出一个元素`i`,访问`i`的所有相邻节点,若相邻节点`j`未被访问,则将其入队。重复以上过程,直到队列为空。
阅读全文