用c语言写一个不用输入的DFS程序,用于测试编译器的优化选项
时间: 2024-10-24 11:09:06 浏览: 7
c语言-的计算机编程语言 .docx
在C语言中编写一个深度优先搜索(DFS)算法,通常需要用户输入作为起点或边的信息,但是如果我们想要创建一个不需要用户输入的简单示例,我们可以利用数组或其他预设数据结构模拟图的节点。下面是一个基本的无输入DFS遍历邻接列表表示的图的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义图的节点和邻接表
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建邻接列表并初始化为无向图
Node* createAdjList(int nodes) {
Node** adj = malloc(nodes * sizeof(Node*));
for (int i = 0; i < nodes; ++i) {
adj[i] = NULL;
}
return adj;
}
// 深度优先搜索函数
void dfs(Node* node, int visited[]) {
if (node != NULL && !visited[node->data]) {
printf("%d ", node->data);
visited[node->data] = 1;
// 遍历相邻节点
Node* temp = node->next;
while (temp != NULL) {
dfs(temp, visited);
temp = temp->next;
}
}
}
int main() {
const int num_nodes = 5; // 示例图有5个节点
Node* adj_list = createAdjList(num_nodes); // 初始化邻接列表
// 这里可以手动添加边,这里仅作为演示,实际应用中需要用户输入或者外部数据源
adj_list[0]->next = adj_list[1]; // 添加从节点0到节点1的边
adj_list[1]->next = adj_list[2];
adj_list[2]->next = adj_list[3];
adj_list[3]->next = adj_list[4];
adj_list[4]->next = adj_list[0];
int visited[num_nodes] = {0}; // 初始化访问标记
dfs(adj_list[0], visited); // 从节点0开始DFS
free(adj_list);
return 0;
}
```
这个例子中,我们没有直接让用户输入,而是通过预先设置好邻接表来演示DFS。如果你想知道如何利用编译器的优化选项,你可以尝试编译此程序并对比不同优化级别(如-O0、O1、O2等)下的运行性能。
阅读全文