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 
posted @ 2018-11-02 19:12  赫凯  阅读(59)  评论(0)    收藏  举报