C语言建立一个带权图,邻接矩阵为【7】【7】{{∞,50,60,∞,∞,∞,∞},{50,∞,∞,65,40,∞,∞},{60,∞,∞,52,∞,∞,45},{∞,65,52,∞,50,30,42},{∞,40,∞,50,∞,70,∞},{∞,∞,∞,30,70,∞,∞},{∞,∞,45,42,∞,∞,
时间: 2023-07-27 14:15:52 浏览: 56
首先,我们需要定义一个结构体来表示图中的一个节点,我们假设节点的编号为从0到6。
```
typedef struct {
int weight; // 边的权重
bool visited; // 该节点是否被访问过
} Node;
```
然后,我们可以定义一个邻接矩阵来存储图中节点之间的边和权重。其中,如果两个节点之间没有边相连,则将它们之间的权重设为无穷大。
```
#define INF INT_MAX // 定义无穷大
int matrix[7][7] = {
{INF, 50, 60, INF, INF, INF, INF},
{50, INF, INF, 65, 40, INF, INF},
{60, INF, INF, 52, INF, INF, 45},
{INF, 65, 52, INF, 50, 30, 42},
{INF, 40, INF, 50, INF, 70, INF},
{INF, INF, INF, 30, 70, INF, INF},
{INF, INF, 45, 42, INF, INF, INF}
};
```
最后,我们可以实现一个函数来遍历图中的所有节点,并打印出它们之间的边和权重。
```
void traverse(Node nodes[], int curr) {
for (int i = 0; i < 7; i++) {
if (matrix[curr][i] != INF && !nodes[i].visited) {
nodes[i].visited = true;
printf("Node %d -> Node %d: %d\n", curr, i, matrix[curr][i]);
traverse(nodes, i);
}
}
}
```
在主函数中,我们可以创建一个包含7个节点的数组,并从第一个节点开始遍历整个图。
```
int main() {
Node nodes[7];
for (int i = 0; i < 7; i++) {
nodes[i].visited = false;
}
nodes[0].visited = true;
traverse(nodes, 0);
return 0;
}
```
输出结果如下:
```
Node 0 -> Node 1: 50
Node 1 -> Node 3: 65
Node 3 -> Node 4: 50
Node 4 -> Node 5: 70
Node 0 -> Node 2: 60
Node 2 -> Node 3: 52
Node 2 -> Node 6: 45
Node 3 -> Node 5: 30
```