回 帖 发 新 帖 刷新版面

主题:关于图的问题,请教各位高手!!!

这是一个求有向图中各个顶点的入度,出度和度数的c程序.是采用邻接矩阵作为存储结构的.
可运行的时候出现错误,说"not an allowed type","Lavlue required infunction main"
是怎么回事呀,请各位高手指点指点



#include <stdio.h>
#define MAXVER 21

typedef struct listnode
  { int adjvex;
    struct listnode *next;
  } listnode;
typedef struct
  {char data;
   listnode *first;
  } headnode;
typedef struct
  { headnode vexs[MAXVER];
    int vexnum,arcnum;
  } ALgraph;

typedef struct
  { int indeg,outdeg,degs;
  } degree;
typedef degree Dtype[MAXVER];

 ALgraph create_ALgraph()
   {ALgraph G;
    int i,s,d;
    listnode *p,*q;
    printf("input the vexnum,arcnum:");
    scanf("%d,%d",&G.vexnum,&G.arcnum);
    for(i=1;i<=G.vexnum;i++)
      {printf("\n input the i of %d:",i);
      scanf("%c",&G.vexs[i].data);
    G.vexs[i].first=NULL;}
 for(i=1;i<=G.arcnum;i++)
   { printf("\ninput the s,d of %d:",i);
     scanf("%d,%d",&s,&d);
     p=(listnode *)malloc(sizeof(listnode));
     p->adjvex=d;
     p->next=G.vexs[s].first;G.vexs[s].first=p;
    }
  return(G);
}


Dtype get_degree_AL(ALgraph G)
   {Dtype D;
     int i;
     listnode *p;
     for(i=1;i<=G.vexnum;i++)
        D[i].indeg=D[i].outdeg=D[i].degs=0;
     for(i=1;i<=G.vexnum;i++)
       { p=G.vexs[i].first;
         while(p!=NULL)
            { D[i].outdeg++;D[p->adjvex].indeg++; p=p->next;}
}}


void output_degree(Dtype D,int n)
   { int i;
     printf(" no indeg outdeg degs\n");
     for(i=1;i<=n;i++)
       printf("%5d%7d%8d%6d\n",i,D[i].indeg,D[i].outdeg,D[i].degs);
     printf("\n");
   }

void main()
 {ALgraph G;
  Dtype D;
  G=create_ALgraph();
  D=get_degree_AL(G);
  output_degree(D,G.vexnum);
}

回复列表 (共2个回复)

沙发

单看你的create_Algraph()就有点别扭,那么大一个结构体当参数传回去,建议用指针。

另外这不是邻接矩阵吧,这是邻接表吧?

板凳

我来回复

您尚未登录,请登录后再回复。点此登录或注册