输入图的邻接表后,建立图的邻接表然后写深度优先遍历与广度优先遍历 c语言代码输出
时间: 2025-01-19 14:10:41 浏览: 49
在C语言中,我们可以使用邻接表数据结构来表示图,并通过递归实现深度优先搜索(DFS)和广度优先搜索(BFS)。这里提供一个基本的代码示例:
首先,我们需要定义一个结构体来表示节点及其相邻节点:
```c
typedef struct {
int vertex; // 节点值
struct AdjListNode* adjList; // 邻接列表指针
} Node;
// 邻接链表节点结构
typedef struct AdjListNode {
int neighbor;
struct AdjListNode* next;
} AdjListNode;
```
接着创建邻接表函数并填充图数据:
```c
void createAdjacencyList(Node** nodes, int vertices, int edges[]) {
for (int i = 0; i < vertices; ++i) {
nodes[i].adjList = NULL;
}
for (int i = 0; i < edges.length(); i += 2) {
Node* src = nodes[edges[i]];
Node* dst = nodes[edges[i+1]];
AdjListNode* newNode = (AdjListNode*)malloc(sizeof(AdjListNode));
newNode->neighbor = dst->vertex;
newNode->next = src->adjList;
src->adjList = newNode;
}
}
```
深度优先搜索(DFS)代码:
```c
void dfs(Node* node, int visited[], int source) {
visited[node->vertex] = 1;
printf("%d ", node->vertex);
AdjListNode* temp = node->adjList;
while (temp != NULL) {
if (visited[temp->neighbor] == 0) {
dfs(nodes + temp->neighbor, visited, source);
}
temp = temp->next;
}
}
void dfsTraversal(Node** nodes, int vertices, int start) {
int visited[vertices] = {0};
dfs(nodes + start, visited, start);
}
```
广度优先搜索(BFS)代码:
```c
void bfs(Node* root, int visited[]) {
queue_t* q = createQueue();
enqueue(q, root);
while (!isEmpty(q)) {
Node* node = dequeue(q);
visited[node->vertex] = 1;
printf("%d ", node->vertex);
AdjListNode* adj = node->adjList;
while (adj != NULL) {
Node* neighbor = nodes + adj->neighbor;
if (visited[neighbor->vertex] == 0) {
enqueue(q, neighbor);
}
adj = adj->next;
}
}
destroyQueue(q);
}
void bfsTraversal(Node** nodes, int vertices, int start) {
int visited[vertices] = {0};
bfs(nodes + start, visited);
}
```
以上代码是一个简化的版本,实际使用时还需要处理内存分配、错误检查等细节。运行DFS或BFS时,你需要传入节点数组`nodes`、顶点数`vertices`以及起始节点`start`。
阅读全文
相关推荐

















