用c++写一个图的邻接矩阵
时间: 2024-12-23 14:20:58 浏览: 43
在C++中,我们可以使用二维数组来表示图的邻接矩阵。邻接矩阵是一个方阵,其中行代表源节点,列代表目标节点,每个元素值表示两个节点之间是否有边连接。如果节点i到j有边,则对应位置的值通常设为1或非零,如果没有则为0。
下面是一个简单的示例,展示如何创建一个邻接矩阵并存储无向图:
```cpp
#include <iostream>
using namespace std;
// 定义图的最大节点数
const int MAX_NODES = 100;
// 邻接矩阵的数据类型
int adjMatrix[MAX_NODES][MAX_NODES];
// 添加边函数
void addEdge(int src, int dest) {
// 确保索引在合法范围内
if (src >= 0 && src < MAX_NODES && dest >= 0 && dest < MAX_NODES) {
adjMatrix[src][dest] = 1; // 表示存在一条从src到dest的边
adjMatrix[dest][src] = 1; // 图是无向的,所以还需要添加从dest到src的边
} else {
cout << "Invalid node index.\n";
}
}
// 主函数示例
int main() {
int numNodes, src, dest;
cout << "Enter number of nodes in the graph: ";
cin >> numNodes;
// 初始化所有边为0
for (int i = 0; i < MAX_NODES; ++i) {
for (int j = 0; j < MAX_NODES; ++j) {
adjMatrix[i][j] = 0;
}
}
// 添加边的示例
cout << "Add edges (source destination): \n";
while (cin >> src >> dest) {
addEdge(src, dest);
}
// 打印邻接矩阵
cout << "\nAdjacency matrix:\n";
for (int i = 0; i < numNodes; ++i) {
for (int j = 0; j < numNodes; ++j) {
cout << adjMatrix[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
在这个例子中,用户可以输入节点和它们之间的边来构建图。然后程序会打印出邻接矩阵。注意这个示例假设图是无向的,如果需要处理有向图,只需要保留对角线以外的部分即可。
阅读全文