C 邻接表变邻接矩阵
我觉得跟输出一下子没啥区别,直接上代码
//邻接矩阵存储
typedef struct Matrix{
int arr[M][M]; //矩阵
int arc_num; //边的数目
int node_num; //节点的数目
bool is_directed;//是否是有向的
}Matrix;
//邻接表变邻接矩阵
void convertAdj2Marix(Graph *g, Matrix **matrix) {
//初始化
int i, j;
EdgeNode *p;
*matrix = (Matrix *)malloc(sizeof(Matrix));
(*matrix)->arc_num = g->arc_num;
(*matrix)->node_num = g->node_num;
(*matrix)->is_directed = g->is_directed;
for (i = 0; i < (*matrix)->node_num; i++) {
for (j = 0; j < (*matrix)->node_num; j++) {
(*matrix)->arr[i][j] = 0;
}
}
//从顶点表里往下遍历
for (i = 0; i < (*matrix)->node_num; i++) {
p = g->adjlist[i].firstedge;
//有连接点就置为1
while (p) {
(*matrix)->arr[i][p->adj_vex_index] = 1;
p = p->next;
}
}
}
//输出矩阵
void putoutMaris(Graph g, Matrix matrix){
printf(" ");
int i, j;
for (i = 0; i < g.node_num; i++) {
printf("%c ", g.adjlist[i].date);
}
printf("\n");
for (i = 0; i < matrix.node_num; i++) {
printf("%c ", g.adjlist[i].date);
for (j = 0; j < matrix.node_num; j++) {
printf("%d ", matrix.arr[i][j]);
}
printf("\n");
}
}
a b c d e f g
a 0 1 1 1 0 0 0
b 1 0 1 0 0 0 1
c 1 1 0 0 0 0 0
d 1 0 0 0 0 0 0
e 0 0 0 0 0 1 0
f 0 0 0 0 1 0 0
g 0 1 0 0 0 0 0
本文来自博客园,作者:赫凯,转载请注明原文链接:https://www.cnblogs.com/heKaiii/p/15491247.html