用C语言写有向图的邻接矩阵存储与遍历,要求从键盘输入多对节点,类似于(A,B)的形式。
时间: 2025-01-02 18:47:34 浏览: 6
在C语言中,我们可以使用二维数组来创建邻接矩阵来表示有向图。首先,我们需要定义一个合适的数据结构,比如`graph`结构体,包含两个整型数组`vertices`和`edges`:
```c
typedef struct {
int vertices; // 顶点数
int edges[vertices][vertices]; // 邻接矩阵,注意矩阵大小为vertices x vertices
} Graph;
```
然后我们编写函数从键盘接收节点对并更新邻接矩阵:
```c
void add_edge(Graph* graph, int src, int dest) {
if (src >= 0 && src < graph->vertices && dest >= 0 && dest < graph->vertices) {
graph->edges[src][dest] = 1; // 如果dest是src的一个邻居,则值设为1(无方向)
} else {
printf("Invalid node indices.\n");
}
}
```
接着,我们创建一个循环来获取用户输入并添加边:
```c
int main() {
int num_nodes, src, dest;
printf("Enter number of nodes: ");
scanf("%d", &num_nodes);
Graph g = {num_nodes, {}}; // 初始化空的邻接矩阵
while (num_nodes--) {
printf("Enter edge in the format (source, destination): ");
scanf("%d %d", &src, &dest);
add_edge(&g, src - 1, dest - 1); // 减1是因为数组索引从0开始
}
// 遍历并打印邻接矩阵
for (int i = 0; i < g.vertices; ++i) {
for (int j = 0; j < g.vertices; ++j) {
if (g.edges[i][j]) {
printf("(%d, %d) -> ", i + 1, j + 1); // 打印节点和连接关系
}
}
printf("\n");
}
return 0;
}
```
阅读全文