主题:关于图的问题,请教各位高手!!!
这是一个求有向图中各个顶点的入度,出度和度数的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);
}
可运行的时候出现错误,说"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);
}