#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAX_VERTEX_NUM 20 //定义最多顶点个数
#define INFINITY 32768 //定义无穷大
//描述图的类型,用枚举型类型来说明
typedef enum{DG,DN,UDG,UDN}GraphKind;
//定义顶点数据类型
typedef char VertexData;
//定义邻接矩阵中元素值(即边信息)的数据类型
typedef int ArcNode;
//定义图的邻接矩阵类型:一个顶点信息的一维数组,一个邻接矩阵、当前图中包含的顶点数、边数以及图类型(有向图、有向网、无向图、无向网)
typedef struct
{ VertexData vertex[MAX_VERTEX_NUM];
ArcNode arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vertexnum,arcnum;
GraphKind kind;
} AdjMatrix;//图的邻接矩阵表示类型
int LocateVertex(AdjMatrix *G,VertexData v) //求顶点位置函数
{
int j=-1,k;
for(k=0;k<G->vertexnum;k++)
{
if(G->vertex[k]==v)
{
return k;
}
}
return j;
}
int CreateDN(AdjMatrix *G) //创建一个又向网
{
int i,j,k,weight;
VertexData v1,v2;
printf("输入图的顶点数和弧数,以逗号分隔\n"); //输入图的顶点数和弧数
scanf("%d,%d",&G->vertexnum,&G->arcnum);
for(i=0;i<G->vertexnum;i++) //初始化邻接矩阵(主对角线元素全为零,其余元素为无穷大)
{
for(j=0;j<G->vertexnum;j++)
{
G->arcs[i][j]=0;
}
}
printf("输入图的顶点信息\n");
getchar();
for(i=0;i<G->vertexnum;i++)
scanf("%c",&G->vertex[i]);
printf("输出图的顶点信息\n");
for(i=0;i<G->vertexnum;i++)
printf("\n%d,%c",i,G->vertex[i]);
getchar();
printf("输入一条弧的两个顶点以及该弧的权值,以空格分隔\n"); //创建邻接矩阵for(k=0;k<G->arcnum;k++)
{
printf("v1=");
v1=getchar();
getchar();
printf("v2=");
v2=getchar();
getchar();
printf("weight=");
scanf("%d",&weight);
getchar();
i=LocateVertex(G,v1); //寻找v1和v2在顶点数组中的位置
j=LocateVertex(G,v2);
G->arcs[i][j]=weight; //邻接矩阵第i行第j列元素值为weight
G->arcs[j][i]=weight;
}
return 1;
}
void OutPutGraph(AdjMatrix G)
{
int i,j;
for(i=0;i<G.vertexnum;i++)
{
printf("\n");
for(j=0;j<G.vertexnum;j++)
{
if(G.arcs[i][j]==INFINITY)printf("∞");
else printf("%-5d",G.arcs[i][j]);
}
}
}
void main()
{
AdjMatrix G;
CreateDN(&G);
printf("用邻接矩阵表示该有向图为:");
OutPutGraph(G);
}。