马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
const int MaxVertexNum = 100;//最大的顶点数目
typedef struct EdgeNode {//边结点
char tail, head;
EdgeNode* hLink;
EdgeNode* tLink;
}EdgeNode;
typedef struct VertexNode {//顶点结点
char data;
EdgeNode * fstIn;
EdgeNode * fstOut;
}Vertex;
typedef struct VertexList {
Vertex array[MaxVertexNum];
int Vnum, ArcNum; //表示输入的顶点数和弧数
}Graph, *pGraph;
int locateVertex(char x, pGraph G) {
for (int i = 0; i < G->Vnum; i++) {
if (G->array[i].data == x) {
return i;
}
}
return 0;
}
void createGraph(pGraph G) {//创造又想吐
int v, a;
char vertex;
char tail, head;//分别表示弧的弧头和弧尾
EdgeNode *q;
printf("请输入该有向图的顶点数和弧数:");
scanf("%d %d", &v, &a);
G->Vnum = v;
G->ArcNum = a;
printf("请输入顶点:\n");
//顶点表的初始化
for (int i = 0; i < G->Vnum; i++) {
printf("请输入第%d个顶点的值:", i + 1);
scanf("%c", &G->array[i].data);
G->array[i].fstIn = G->array[i].fstOut = NULL;
}
printf("建立边表:\n");
for (int i = 0; i < G->ArcNum; i++) {
int k, j;
printf("请输入弧:\n");
scanf("%c,%c", &tail, &head);
k = locateVertex(tail, G);
j = locateVertex(head, G);
q = (EdgeNode *)malloc(sizeof(EdgeNode));
q->tail = tail;
q->head = head;
q->hLink = G->array[j].fstIn;//此处建议别画图,越画越乱,直接写
q->tLink = G->array[k].fstOut;
G->array[k].fstOut = q;
G->array[j].fstIn = q;
}
}
void displayGraph(pGraph G) {
EdgeNode *q;
EdgeNode *p;
for (int i = 0; i < G->Vnum; i++) {
q = G->array[i].fstIn;
p = G->array[i].fstOut;
if (!q)
{
printf("%c顶点没有入度!", G->array[i].data);
}
else {
printf("%c的入度是: \n", G->array[i].data);
while (!q)
{
printf("%c->%c ", q->tail, q->head);
q = q->hLink;
}
}
if (!p) {
printf("%c顶点没有出度!", G->array[i].data);
}
else {
printf("%c的出度是: \n", G->array[i].data);
while (!p)
{
printf("%c->%c", p->tail, p->head);
q = q->tLink;
}
}
}
}
int main() {
Graph G;
createGraph(&G);
displayGraph(&G);
return 0;
}
以上是我码的代码,但是有个奇葩的问题
就是我在对顶点表初始化的时候就是以下这段//顶点表的初始化
for (int i = 0; i < G->Vnum; i++) {
printf("请输入第%d个顶点的值:", i + 1);
scanf("%c", &G->array[i].data);
G->array[i].fstIn = G->array[i].fstOut = NULL;
}
经过我的调试,我发现进入for循环第一个scanf直接不执行.而且,我原本定的顶点数是3个顶点
但是第一个和第三个scanf直接跳过,只输入了一次,人晕了,希望有大佬能帮帮我。。。。 |