采用邻接矩阵/邻接表建立图的代码
时间: 2023-10-20 11:04:57 浏览: 104
邻接矩阵:
```c++
const int maxn = 1005; // 最大点数
int g[maxn][maxn]; // 邻接矩阵
int n, m; // 点数、边数
void addEdge(int u, int v) {
g[u][v] = g[v][u] = 1; // 无向图
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 0; i < m; i++) {
int u, v;
scanf("%d%d", &u, &v);
addEdge(u, v);
}
return 0;
}
```
邻接表:
```c++
const int maxn = 1005; // 最大点数
vector<int> g[maxn]; // 邻接表
int n, m; // 点数、边数
void addEdge(int u, int v) {
g[u].push_back(v);
g[v].push_back(u); // 无向图
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 0; i < m; i++) {
int u, v;
scanf("%d%d", &u, &v);
addEdge(u, v);
}
return 0;
}
```
相关问题
(1)采用邻接矩阵/邻接表建立图; (2)采用深度优先/广度优先搜索方式遍历图 (3)编程实现Diikstra最短路径算法。
好的,让我来回答你的问题。
对于第一个问题,建立图可以采用邻接矩阵或邻接表两种方式。邻接矩阵是一种二维数组,其中每个元素表示两个节点之间的连接情况,如果节点之间有边相连,则对应元素为1,否则为0。邻接表则是一种链表,其中每个节点表示一个节点,节点内部保存了与该节点相连的其他节点的信息。
对于第二个问题,遍历图可以采用深度优先搜索或广度优先搜索。深度优先搜索从起始节点开始,沿着深度方向不断遍历,直到到达最深处,然后回溯到上一层节点,继续向下一个方向遍历。广度优先搜索则是从起始节点开始,按照距离逐层遍历,先遍历与起始节点距离为1的节点,然后是距离为2的节点,以此类推。
对于第三个问题,Dijkstra算法是一种用于计算图中最短路径的算法。它从起点开始,依次计算出到每个节点的最短路径,并将计算结果保存在一个距离表中。在计算过程中,需要使用一个优先队列来优化计算效率。
以上是我的回答,希望对你有帮助。如果你还有其他问题,可以继续问我。
建立图(dg/dn/udg/udn)的邻接矩阵/邻接表。
邻接矩阵是用二维数组来表示图中各个顶点之间的连接关系的数据结构。对于有向图(dg)和无向图(udg),邻接矩阵都是一个n*n的矩阵,其中n表示图中顶点的个数。矩阵的每个元素a[i][j]表示顶点i到顶点j是否有边相连,如果有则为1,否则为0。
而邻接表是一种由单链表或者数组构成的数据结构,用于表示图中各个顶点的邻接关系。对于有向图(dg)和无向图(udg),邻接表的构建方式略有不同。对于有向图,邻接表中每个顶点都对应一个链表,链表中存储了该顶点指向的其他顶点;而对于无向图,邻接表中每个顶点也都对应一个链表,链表中存储了与该顶点相连的其他顶点。
邻接矩阵和邻接表都是用来表示图的连接关系的数据结构,它们各有优缺点。邻接矩阵在查找两个顶点之间的连接关系时更为高效,但是当图中边的数量较少时会浪费空间;而邻接表则更适合于表示稀疏图,节省了空间,但在查找两个顶点之间的连接关系时效率稍低。根据实际的使用情况,可以选择使用邻接矩阵或邻接表来表示图的连接关系。
阅读全文