5.已知图的邻接表,怎样构造该图?
时间: 2023-12-07 21:06:58 浏览: 88
构造邻接表表示的图的步骤如下:
1. 创建一个空的邻接表。
2. 对于图中的每个顶点,创建一个链表存储与该顶点相邻的顶点。
3. 对于每个顶点,遍历其所有的边,将边连接到对应的链表上。
4. 如果图是有向图,则只需在源顶点的链表中添加目标顶点;如果是无向图,则需要在两个顶点的链表上都添加对方。
以下是一个示例邻接表表示的无向图:
```
0: 1->2
1: 0->3
2: 0->3->4
3: 1->2->4
4: 2->3
```
其中,每一行表示一个顶点及其对应的链表,箭头指向该顶点所连接的相邻顶点。例如,第一行表示顶点0,它与顶点1和2相邻。
相关问题
已知邻接表的存储定义,试在此无向图的邻接表存储结构上实现图的基本操作createGraph,请参考十字链表的构造方法CrateDG的思路
邻接表的存储定义通常包括一个顶点数组和一个指向边链表的指针数组。邻接表中每一个链表的头结点都是一个存储顶点信息的结构体,其余节点则是存储边信息的结构体。邻接表的构建过程可以仿照十字链表的构造方法。
具体实现如下:
```C++
#include<iostream>
#include<vector>
using namespace std;
struct EdgeNode{
int adjvex; // 邻接点编号
int weight; // 权重
EdgeNode* next; // 指向下一个邻接点
};
struct VertexNode{
int data; // 顶点信息
EdgeNode* firstEdge; // 指向第一个邻接点
};
class Graph{
public:
Graph(int n, vector<vector<int>> edges){ // n是顶点个数,edges是边的信息
this->n = n;
graph = new VertexNode[n]; // 初始化顶点数组
for(int i=0; i<n; i++){
graph[i].data = i; // 顶点信息初始化
graph[i].firstEdge = nullptr; // 指向第一个邻接点初始化
}
// 构建邻接表
for(auto edge:edges){
int u = edge[0], v = edge[1], weight = edge[2];
EdgeNode* newEdge1 = new EdgeNode{v, weight, graph[u].firstEdge};
graph[u].firstEdge = newEdge1;
EdgeNode* newEdge2 = new EdgeNode{u, weight, graph[v].firstEdge};
graph[v].firstEdge = newEdge2;
}
}
~Graph(){
for(int i=0; i<n; i++){
EdgeNode* edge = graph[i].firstEdge;
while(edge != nullptr){
EdgeNode* temp = edge->next;
delete edge;
edge = temp;
}
}
delete[] graph;
}
void printGraph(){ // 输出邻接表
for(int i=0; i<n; i++){
cout << i << " : ";
EdgeNode* edge = graph[i].firstEdge;
while(edge != nullptr){
cout << edge->adjvex << "(" << edge->weight << ") ";
edge = edge->next;
}
cout << endl;
}
}
private:
int n; // 顶点个数
VertexNode* graph; // 邻接表
};
int main(){
vector<vector<int>> edges = {{0,1,1}, {0,2,2}, {1,2,3}, {1,3,4}, {2,3,5}};
Graph g(4, edges);
g.printGraph();
return 0;
}
```
上述代码可以构建一个无向图,并输出其邻接表。可以根据需要修改构建方式,实现有向图和带权图的构建。
怎么画邻接表的邻接矩阵
邻接表和邻接矩阵是两种表示图的方式,它们之间可以相互转换。如果已知邻接表,可以通过以下步骤画出邻接矩阵:
1. 找出所有节点的编号,从1到n。
2. 构造一个n×n的矩阵,初始值都为0。
3. 对于邻接表中的每个节点i,遍历它的所有邻居节点j,将矩阵中第i行第j列的值设为1。
以下是一个示例:
假设有以下的邻接表:
```
1 -> 2 -> 3
2 -> 4
3 -> 4
4 -> 1
```
首先,我们找出所有节点的编号,它们是1、2、3和4。
然后,我们构造一个4×4的矩阵,初始值都为0,如下:
```
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
```
接下来,我们遍历邻接表中的每个节点,并将它的邻居节点在矩阵中标记为1。对于节点1,它的邻居有节点2和节点3,因此矩阵中第1行第2列和第1行第3列的值应该设为1。同理,对于节点2、3和4,它们的邻居节点分别是4、4和1,因此矩阵中第2行第4列、第3行第4列和第4行第1列的值应该设为1。最终得到的矩阵如下:
```
0 1 1 0
0 0 0 1
0 0 0 1
1 0 0 0
```
这就是邻接表所对应的邻接矩阵。
阅读全文