输入
8,10
1
2
3
4
5
6
7
8
1,2
1,5
2,6
3,6
3,4
3,7
4,7
4,8
6,7
7,8
输出
请输入顶点数和边数:请输入顶点本身的数据:
请输入边的数据:
0 1 0 0 1 0 0 0
1 0 0 0 0 1 0 0
0 0 0 1 0 1 1 0
0 0 1 0 0 0 1 1
1 0 0 0 0 0 0 0
0 1 1 0 0 0 1 0
0 0 1 1 0 1 0 1
0 0 0 1 0 0 1 0
#define vertex_NUM 20
#define VERType int
#define InfoType char //存储弧或者边额外信息的变量类型
#define VertexType int
typedef struct {
VERType adj;
InfoType * info;
}AdjMatrix[vertex_NUM][vertex_NUM];
typedef struct {
VertexType vexs[vertex_NUM];
AdjMatrix arcs; //二维数组,记录顶点之间的关系
int vexnum,arcnum;
}MGraph;
//判断出顶点在二维数组中的位置
int LocateVex(MGraph * G,VertexType v){
//遍历一维数组,找到变量v
int i=0;
for (; i<G->vexnum; i++) {
if (G->vexs[i]==v) {
break;
}
}
//如果找不到,返回-1
if (i>G->vexnum) {
printf("no such vertex.\n");
return -1;
}
return i;
}
void CreateDN(MGraph *G){
scanf("%d,%d",&(G->vexnum),&(G->arcnum));
for (int i=0; i<G->vexnum; i++) {
scanf("%d",&(G->vexs[i]));
}
for (int i=0; i<G->vexnum; i++) {
for (int j=0; j<G->vexnum; j++) {
G->arcs[i][j].adj=0;
G->arcs[i][j].info=NULL;
}
}
for (int i=0; i<G->arcnum; i++) {
int v1,v2;
scanf("%d,%d",&v1,&v2);
int n=LocateVex(G, v1);
int m=LocateVex(G, v2);
if (m==-1 ||n==-1) {
return;
}
G->arcs[n][m].adj=1;
G->arcs[m][n].adj=1;
}
}
void PrintGrapth(MGraph G)
{
for(int i=0;i<G.vexnum;i++)
{
for(int j=0;j<G.vexnum;j++)
{
printf("%d ",G.arcs[i][j].adj);
}
printf("\n");
}
}
int main() {
MGraph G;//建立一个图的变量
CreateDN(&G);//调用创建函数,传入地址参数
printf("请输入顶点数和边数:请输入顶点本身的数据:\n");
printf("请输入边的数据:\n");
PrintGrapth(G);//输出图的二阶矩阵
return 0;
}