#include
#include
#define INF 32767
#define MAXV 100
typedef char InfoType;
typedef struct
{ int no;
InfoType info;
}VertexType;
typedef struct
{ int edges[MAXV][MAXV];
int n,e;
VertexType vexs[MAXV];
}MatGraph;
typedef struct ANode
{ int adjvex;
struct ANode * nextarc;
int weight;
}ArcNode;
typedef struct Vnode
{ InfoType info;
int count;
ArcNode * firstarc;
}VNode;
typedef struct
{ VNode adjlist[MAXV];
int n,e;
}AdjGraph;
void CreateMat(MatGraph &g,int A[MAXV][MAXV],int n,int e)
{ int i,j;
g.n=n,g.e=e;
for(i=0;ifor(j=0;jvoid DispMat(MatGraph g)
{ int i,j;
for(i=0;ifor(j=0;jif(g.edges[i][j]!=INF)
printf("%4d",g.edges[i][j]);
else
printf("%4s","∞");
printf("\n");
}
}
void CreateAdj(AdjGraph * &G,int A[MAXV][MAXV],int n,int e)
{ int i,j;
ArcNode * p;
G=(AdjGraph *)malloc(sizeof(AdjGraph));
for(i=0;iadjlist[i].firstarc=NULL;
for(i=0;ifor(j=n-1;j>=0;j--)
if(A[i][j]!=0&&A[i][j]!=INF)
{ p=(ArcNode *)malloc(sizeof(ArcNode));
p->adjvex=j;
p->weight=A[i][j];
p->nextarc=G->adjlist[i].firstarc;
G->adjlist[i].firstarc=p;
}
G->n=n; G->e=n;
}
void DispAdj(AdjGraph * G)
{ ArcNode *p;
for(int i=0;in;i++)
{ p=G->adjlist[i].firstarc;
printf("%3d:",i);
while(p!=NULL)
{ printf("%3d[%d]→",p->adjvex,p->weight);
p=p->nextarc;
}
printf("^\n");
}
}
void DestroyAdj(AdjGraph * &G)
{ ArcNode *pre,*p;
for(int i=0;in;i++)
{ pre=G->adjlist[i].firstarc;
if(pre!=NULL)
{ p=pre->nextarc;
while(p!=NULL)
{ free(pre);
pre=p; p=p->nextarc;
}
free(pre);
}
}
free(G);
}
```c
#include"graph.cpp"
int main()
{
MatGraph g;
AdjGraph *G;
int A[MAXV][MAXV]={
{0,5,INF,7,INF,INF},{INF,0,4,INF,INF,INF},
{8,INF,0,INF,INF,9},{INF,INF,5,0,INF,6},
{INF,INF,INF,5,0,INF},{3,INF,INF,INF,1,0}};
int n=6,e=10;
printf("(1)图G的邻接矩阵:\n");
CreateMat(g,A,n,e);
printf("(1)图G的邻接矩阵:\n");DispMat(g);
printf("(2)图G的邻接表:\n");
DestroyAdj(G);
return 1;
}


请问你想解决什么问题?