64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream.h>
#include <string.h>
#include <malloc.h>
#define MAXSIZE 100
#define INFINITY 10000
struct MGraph
{
char *vex[MAXSIZE];//表示顶点
int arc[MAXSIZE][MAXSIZE];//表示边的信息,权值
int numVex,numArc;//分别表示顶点数和边数
};
int Location(MGraph N,char *v)
{
for (int i=0;i<N.numVex;i++)
if(strcmp((N.vex[i]),v)==0)
return i;
return -1;
}
void createMGprah(MGraph *N)
{
int i,j,w;
char *v1,*v2;
cout<<"请输入顶点数和边数:";
cin>>N->numVex>>N->numArc;
cout<<"请输入"<<N->numVex<<"顶点的数据:";
for(i=0;i<N->numVex;i++)
{
N->vex[i]=(char *)malloc(5*sizeof(char));
cin>>N->vex[i];
}
for(i=0;i<N->numVex;i++)
for(j=0;j<N->numVex;j++)
N->arc[i][j]=INFINITY;
cout<<"请输入边之间的关系及权值:";
for (i=0;i<N->numArc;i++)
{
cin>>v1>>v2>>w;
i=Location(*N,v1);
j=Location(*N,v2);
N->arc[i][j]=w;
}
}
void destroyMGprah(MGraph *N)
{
for(int i=0;i<N->numVex;i++)
for (int j=0;j<N->numArc;j++)
{
if(N->arc[i][j]!=INFINITY)
delete N->vex[i];
}
N->numArc=0;
N->numVex=0;
}
void printMGprah(MGraph N)
{
for(int i=0;i<N.numVex;i++)
cout<<N.arc[i]<<" ";
for (i=0;i<N.numVex;i++)
for (int j=0;j<N.numVex;j++)
{
cout<<N.arc[i]<<" ";
cout<<N.vex[i][j]<<" ";
}
}
int main()
{
MGraph N;
createMGprah(&N);
printMGprah(N);
destroyMGprah(&N);
return 0;
}