图怎么实现不了?请高手看看这个C代码
#include<stdio.h>
#include<stdlib.h>
typedef struct graph *Graph;
typedef struct graph{
int NoEdge;
int e;
int n;
int **a;
}AWDgraph;
int **Make2DArray(int x,int y,int flag)
{
int **p;
int i,j;
p=(int **)malloc(x*sizeof(int*));
for(i=1;i<=x;i++)
p[i]=(int *)malloc(y*sizeof(int));
for(i=1;i<=x;i++)
for(j=1;j<=y;j++)
p[i][j]=flag;
return p;
}
Graph GraphInit(int n,int noedge)
{
Graph G=(struct graph*)malloc(sizeof *G);
G->n=n;
G->e=0;
G->NoEdge=noedge;
G->a=Make2DArray(G->n+1,G->n+1,noedge);
return G;
}
int GraphEdges(Graph G)
{ return G->e;}
int GraphVertices(Graph G)
{ return G->n;}
int GraphExist(int i,int j,Graph G)
{
if(i<1||i>G->n||j<1||j>G->n||G->a[i][j]==G->NoEdge) return 0;
return 1;
}
void GraphAdd(int i,int j,int w,Graph G)
{
if(i<1||j<1||i>G->n||j>G->n||i==j||G->a[i][j]!=G->NoEdge) {printf("Bad input.\n");exit(1);}
G->a[i][j]=w;
G->e++;
}
void GraphDelete(int i,int j,Graph G)
{
if(i<1||j<1||i>G->n||j>G->n||G->a[i][j]==G->NoEdge) {printf("Bad input.\n");exit(1);}
G->a[i][j]=G->NoEdge;
G->e--;
}
int OutDegree(int i,Graph G)
{
int j,sum=0;
if(i<1||i>G->n) {printf("Bad input.\n");exit(1);}
for(j=1;j<=G->n;j++)
if(G->a[i][j]!=G->NoEdge)
sum++;
return sum;
}
int InDegree(int i,Graph G)
{
int j,sum=0;
if(i<1||i>G->n) {printf("Bad input.\n");exit(1);}
for(j=1;j<=G->n;j++)
if(G->a[j][i]!=G->NoEdge)
sum++;
return sum;
}
void GraphOut(Graph G)
{
int i,j;
for(i=1;i<=G->n;i++){
for(j=1;j<G->n;j++)
printf(" %d ",G->a[i][j]);
printf("\n");
}
}
void main()
{
Graph g;
g=GraphInit(5,0);
Graph out(g);
}
运行了但没显示矩阵