96.png

    1. /*
    2. 写出从图的邻接表表示转换成邻接矩阵表示的算法
    3. 分析:
    4. 我们之前也写过邻接矩阵的存储方式,在这里我们就只需要去遍历邻接表中的每一个顶点,
    5. 并根据边的信息,将数据填入邻接矩阵中即可
    6. */
    7. //分别写出邻接表和邻接矩阵两种方式的结构体
    8. //结构体的构建一定要和创建邻接表、创建邻接矩阵里的一模一样,不然会有问题,把我整惨了
    9. #include <stdio.h>
    10. #include <stdlib.h>
    11. #define MAXSIZE 100
    12. typedef struct Graph {
    13. char Vertex[MAXSIZE];//顶点数组
    14. int Edge[MAXSIZE][MAXSIZE];
    15. int numV, numE;//顶点、边数量
    16. }adjMatrix;//邻接矩阵
    17. //邻接表存储的图
    18. typedef struct EdgeNode {//边表结点
    19. int index;//该边所指向的顶点的位置,在顶点数组里面的位置信息
    20. int weight;//权值
    21. EdgeNode *next;//下一个邻接边
    22. }EdgeNode;
    23. typedef struct VertexNode {//顶点表节点
    24. char info;//顶点信息
    25. EdgeNode *firstEdge;//指向第一条依附该顶点的边的指针
    26. }VertexNode, Adjlist[MAXSIZE];
    27. typedef struct {
    28. Adjlist adjlist;//顶点数组
    29. int numE, numV;//边数、顶点数
    30. }ALGraph;
    31. void edgeIput(ALGraph *alG, adjMatrix *amG, int index, int *visited) {
    32. visited[index] = 1;//标记为已访问
    33. for (EdgeNode *p = alG->adjlist[index].firstEdge; p; p = p->next) {
    34. amG->Edge[index][p->index] = p->weight;//边信息存入邻接矩阵
    35. if (!visited[p->index])
    36. edgeIput(alG, amG, p->index, visited);
    37. }
    38. }
    39. void transform(ALGraph *alG, adjMatrix *amG) {//开始进行转换
    40. amG->numE = alG->numE;
    41. amG->numV = alG->numV;
    42. for (int v = 0; v < amG->numV; v++) {
    43. amG->Vertex[v] = alG->adjlist[v].info;//顶点信息存入邻接矩阵
    44. }
    45. //初始化图
    46. for (int i = 0; i < amG->numV; i++) {
    47. for (int j = 0; j < amG->numV; j++) {
    48. i == j ? amG->Edge[i][j] = 0 : amG->Edge[i][j] = 32767;
    49. }
    50. }
    51. for (int v = 0; v < amG->numV; v++) {
    52. //存入边信息
    53. EdgeNode *p = alG->adjlist[v].firstEdge;
    54. while (p) {
    55. amG->Edge[v][p->index] = p->weight;
    56. p = p->next;
    57. }
    58. }
    59. }
    60. int main() {
    61. ALGraph alG;
    62. adjMatrix amG;
    63. void createGraphInFile(ALGraph*);//声明方法
    64. void dispGraph(adjMatrix *);
    65. createGraphInFile(&alG);//创建图G
    66. transform(&alG, &amG);
    67. dispGraph(&amG);
    68. return 0;
    69. }