用邻接矩阵法存储一个顶点数为5的带权无向完全图,顶点有文字信息,并进行深度优先遍历,输出带顶点文字信息的邻接矩阵和深度优先遍历结果,用C语言
时间: 2024-12-02 12:18:34 浏览: 31
在C语言中,我们可以使用二维数组来表示邻接矩阵,每个元素的值代表两个顶点之间的边是否存在以及权重。对于一个顶点数为5的无向完全图,邻接矩阵会是一个大小为5x5的矩阵,其中对角线元素通常置为0(因为无向图中没有自环),其余非对角线元素都为1,表示每两个不同的顶点间都有边,权重可以用整数值表示。
```c
#include <stdio.h>
#define V 5 // 顶点数
typedef struct {
int data[V][V]; // 邻接矩阵
char vertex[V][10]; // 存储顶点的文字信息
} Graph;
void printMatrix(Graph* graph) {
for (int i = 0; i < V; ++i) {
for (int j = 0; j < V; ++j) {
printf("%d ", graph->data[i][j]);
}
printf("\n");
}
}
// 深度优先搜索函数
void dfs(int v, Graph* graph, int visited[]) {
visited[v] = 1;
printf("%s -> ", graph->vertex[v]); // 输出当前顶点的文字信息
// 访问所有从v出发的未访问顶点
for (int u = 0; u < V; ++u) {
if (graph->data[v][u] && !visited[u]) {
dfs(u, graph, visited);
}
}
}
int main() {
Graph graph;
// 初始化邻接矩阵和顶点信息
for (int i = 0; i < V; ++i) {
strcpy(graph.vertex[i], "顶点" + i); // 字符串形式的顶点名
for (int j = 0; j < V; ++j) {
graph.data[i][j] = i != j ? 1 : 0; // 对角线为0,其他元素为1
}
}
int visited[V] = {0}; // 初始状态,所有顶点未访问
dfs(0, &graph, visited);
printMatrix(&graph);
return 0;
}
```
运行上述程序后,首先会打印出邻接矩阵,然后深度优先遍历的结果会按顺序输出。注意,由于图是无向的,所以遍历的路径可能会有多条。在实际应用中,你可以根据需要选择起点(例如第一个顶点0)开始遍历。
阅读全文