```c
define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define MAX
#define INFINITY 2147483648
#define OK 1
#define Error 0
typedef enum { DG, DN, UDG, UDN }GraphKind;
typedef char VertexData;
typedef struct ArcNode
{
int adj;
}ArcNode;
typedef struct
{
VertexData vexs[5];
ArcNode arcs[5][6];
int vexnum, arcnum;
GraphKind kind;
}AdjMatrix;
int LocateVertex(AdjMatrix* G, VertexData v)
{
int j = Error, k;
for (k = 0;k < G->vexnum;k++)
if (G->vexs[k] == v)
{
j = k;
break;
}
return(j);
}
int CreateDN(AdjMatrix* G)
{
int i, j, k, weight;
VertexData v1, v2;
printf("输入图的顶点数和弧数:\n");
scanf("%d,%d", &G->vexnum, &G->arcnum);
for (i = 0;i < G->vexnum;i++)
for (j = 0;j < G->vexnum;j++)
G->arcs[i][j].adj = INFINITY;
printf("输入图的顶点");
for (i = 0;i < G->vexnum;i++)
{
getchar();
scanf("%c", &G->vexs[i]);
}
for (k = 0;k < G->arcnum;k++)
{
printf("输入弧的两个顶点和权值:\n");
scanf("%c,%c,%d", &v1, &v2, &weight);
i = LocateVertex(G, v1);
j = LocateVertex(G, v2);
G->arcs[i][j].adj = weight;
}
G->kind = DN;
for (i = 0;i < G->vexnum;i++)
{
for (j = 0;j < G->vexnum;j++)
{
printf("%d ", G->arcs[i][j].adj);
}
}
return(OK);
}
int main()
{
AdjMatrix G;
CreateDN(&G);
}
```
scanf("%c,%c,%d", &v1, &v2, &weight);之后,要加 getchar(),否则下一个%c接收换行符了
另外53行for循环前,也要加getchar(),否则上一个循环最后输入的换行符会被接收
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define MAX
#define INFINITY 2147483648
#define OK 1
#define Error 0
typedef enum { DG, DN, UDG, UDN }GraphKind;
typedef char VertexData;
typedef struct ArcNode
{
int adj;
}ArcNode;
typedef struct
{
VertexData vexs[5];
ArcNode arcs[5][6];
int vexnum, arcnum;
GraphKind kind;
}AdjMatrix;
int LocateVertex(AdjMatrix* G, VertexData v)
{
int j = Error, k;
for (k = 0;k < G->vexnum;k++)
if (G->vexs[k] == v)
{
j = k;
break;
}
return(j);
}
int CreateDN(AdjMatrix* G)
{
int i, j, k, weight;
VertexData v1, v2;
printf("输入图的顶点数和弧数:\n");
scanf("%d,%d", &G->vexnum, &G->arcnum);
for (i = 0;i < G->vexnum;i++)
for (j = 0;j < G->vexnum;j++)
G->arcs[i][j].adj = INFINITY;
printf("输入图的顶点");
for (i = 0;i < G->vexnum;i++)
{
getchar();
scanf("%c", &G->vexs[i]);
}
getchar();
for (k = 0;k < G->arcnum;k++)
{
printf("输入弧的两个顶点和权值:\n");
scanf("%c,%c,%d", &v1, &v2, &weight);
getchar();
i = LocateVertex(G, v1);
j = LocateVertex(G, v2);
G->arcs[i][j].adj = weight;
}
G->kind = DN;
for (i = 0;i < G->vexnum;i++)
{
for (j = 0;j < G->vexnum;j++)
{
printf("%d ", G->arcs[i][j].adj);
}
}
return(OK);
}
int main()
{
AdjMatrix G;
CreateDN(&G);
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!