18878977809 发表于 2021-6-4 20:12:45

邻接矩阵的基本运算代码

#include<stdio.h>
#include<stdlib.h>

typedef int ElemType;

#define MAXV 20
#define INF 32767


typedef struct//顶点
{
        char no;
    ElemType data;
}VertexType;

typedef struct//邻接矩阵数组
{
        int edges;   //邻接矩阵数组
        int n,e;               //顶点数,边数
    VertexType vexs;   //顶点信息
}MatGraph;



//创建图的运算算法
void CreateAdj(MatGraph *G)//创建图的邻接矩阵
{
G=(MatGraph *)malloc(sizeof(MatGraph));
int i=0,j=0;
printf("请输入邻接矩阵的顶点数和边数:\n");
scanf("%d",&G->n);
scanf("%d",&G->e);

printf("请输入邻接矩阵的顶点信息:\n");
while(i<G->n)
{
    scanf("%c",&G->vexs.no);
        i++;
        getchar();
}
i=0;

printf("请输入邻接矩阵:\n");
while(i<G->n)
{
    while(j<G->n)
        {
      scanf("%d",&G->edges);
          j++;
        }
        j=0;
        i++;
}
}


//输出图的运算算法
void DispAdj(MatGraph *G)
{
int i=0,j=0;
printf("邻接矩阵:\n");
while(i<G->n)
{
          while(j<G->n)
          {
         printf("%3d",G->edges);
               j++;
          }
      printf("\n");
          j=0;
          i++;
}
}


//销毁图的运算算法
void DestroyAdj(MatGraph *G)
{
   free(G);
}



void main()
{
   MatGraph *G;
   CreateAdj(G);
   DispAdj(G);
}




在调试时G->n,G->e 出现CXX0030:Error:expression cannot be evpraluated 的提示

lei1996 发表于 2021-6-4 20:57:08

void main()
{
   MatGraph *G;
   CreateAdj(G);
   DispAdj(G);
}
把这里的MatGraph *G;换成MatGraph *G=(MatGraph *)malloc(sizeof(MatGraph));可以解决就不需要void CreateAdj(MatGraph *G)中的G=(MatGraph *)malloc(sizeof(MatGraph));
如果你就是为了在void CreateAdj(MatGraph *G)申请内存那就返回值类型改为MatGraph * 然后返回G   
因为你原来void CreateAdj(MatGraph *G)函数中的 G=(MatGraph *)malloc(sizeof(MatGraph));并不会把申请地址传给void main()中的G所以会导致你DispAdj(G);中的G是个野指针
页: [1]
查看完整版本: 邻接矩阵的基本运算代码