用Python写出将邻接表生成矩阵的代码
时间: 2023-03-21 17:03:54 浏览: 89
可以使用以下Python代码将邻接表转换为矩阵:
```python
def adjacency_list_to_matrix(adj_list):
nodes = sorted(adj_list.keys())
n = len(nodes)
adj_matrix = [[0] * n for _ in range(n)]
for i in range(n):
for neighbor in adj_list[nodes[i]]:
j = nodes.index(neighbor)
adj_matrix[i][j] = 1
return adj_matrix
```
其中,`adj_list`是一个字典,表示邻接表。字典的键是节点的名称,值是一个列表,包含与该节点相邻的节点的名称。生成的矩阵是一个二维列表,大小为 $n \times n$,其中 $n$ 是节点的数量。如果节点 $i$ 与节点 $j$ 相邻,则矩阵的第 $i$ 行第 $j$ 列为 1,否则为 0。
相关问题
将关联矩阵转为邻接矩阵python代码
将关联矩阵转为邻接矩阵的Python代码可以通过以下方式实现:
```python
def convert_adjacency_matrix(incidence_matrix):
num_vertices = len(incidence_matrix)
adjacency_matrix = [[0] * num_vertices for _ in range(num_vertices)]
for i in range(num_vertices):
for j in range(num_vertices):
if incidence_matrix[i][j] == 1:
adjacency_matrix[i][j] = 1
return adjacency_matrix
```
这段代码中,`incidence_matrix` 是关联矩阵,`num_vertices` 是顶点的数量。首先,创建一个全零的邻接矩阵 `adjacency_matrix`,然后遍历关联矩阵的每个元素,如果关联矩阵中的元素为 1,则在邻接矩阵中对应位置置为 1。
请注意,这里假设关联矩阵是一个二维列表,其中元素为 0 或 1。如果关联矩阵的元素不是 0 或 1,需要根据具体情况进行修改。
给出邻接矩阵转换为邻接表的C代码
好的,下面是使用 C 语言将邻接矩阵转换为邻接表的代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20 // 最大顶点数
// 邻接矩阵存储的图
typedef struct {
int vertices[MAX_VERTEX_NUM]; // 顶点信息
int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 边的信息
int vertexNum, edgeNum; // 图的顶点数和边数
} MatrixGraph;
// 邻接表存储的图
typedef struct AdjNode {
int vertex; // 邻接点信息
int weight; // 边的权值(如果是无权图,则设为 1)
struct AdjNode *next; // 指向下一个邻接点的指针
} AdjNode;
typedef struct {
AdjNode *adjList[MAX_VERTEX_NUM]; // 邻接表
int vertexNum, edgeNum; // 图的顶点数和边数
} ListGraph;
// 将邻接矩阵存储的图 graph 转换为邻接表存储的图并返回
ListGraph *matrixToList(MatrixGraph *graph) {
ListGraph *result = (ListGraph *)malloc(sizeof(ListGraph));
result->vertexNum = graph->vertexNum;
result->edgeNum = graph->edgeNum;
// 初始化邻接表
for (int i = 0; i < graph->vertexNum; i++) {
result->adjList[i] = NULL;
}
// 遍历邻接矩阵,将边信息加入邻接表
for (int i = 0; i < graph->vertexNum; i++) {
for (int j = 0; j < graph->vertexNum; j++) {
if (graph->edges[i][j] != 0) { // 如果有边
AdjNode *node = (AdjNode *)malloc(sizeof(AdjNode));
node->vertex = j;
node->weight = graph->edges[i][j];