马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MVNum 100 //最大顶点数
//边结点
typedef struct ArcNode{
int adjvex;
struct ArcNode *nextarc;
}ArcNode;
//顶点信息
typedef struct VNode{
char data[3];
ArcNode *firstarc;
}VNode, AdjList[MVNum]; //AdjList表示邻接表类型
//邻接表
typedef struct{
AdjList vertices;
int vexnum, arcnum;
}ALGraph;
void CreateUDG(ALGraph *G);
void linkLast(ArcNode *vertice, ArcNode *node);
int LocateVex(ALGraph *G, char *str);
void DispGraphAdjList(ALGraph *G);
void CreateUDG(ALGraph *G) {
G = (ALGraph *)malloc(sizeof(ALGraph));
ArcNode *ptr; // 边表指针类型
scanf("%d %d", &G->vexnum, &G->arcnum);
for(int i=0; i<G->vexnum; i++) {
scanf("%s", G->vertices[i].data); // 顶点值
G->vertices[i].firstarc = NULL; // 初始化表头结点指针域
}
// 边依附的两个顶点值
for(int k=0; k<G->vexnum; k++) {
char s1[3], s2[3];
int i, j;
printf("输入:\n");
scanf("%s %s", s1, s2);
i = LocateVex(G, s1); // 确定起点位置
j = LocateVex(G, s2); // 确定终点位置
ArcNode *p1, *p2;
// p1 = (ArcNode *)malloc(sizeof(ArcNode));
// p1->adjvex = j;
// // 将p1链接到j所在链表末尾
// if(G->vertices[i].firstarc == NULL) {
// G->vertices[i].firstarc = p1;
// } else {
// linkLast(G->vertices[i].firstarc, p1);
// }
//
// p2 = (ArcNode *)malloc(sizeof(ArcNode));
// p2->adjvex = i;
// // 将p2链接到j所在链表末尾
// if(G->vertices[j].firstarc == NULL) {
// G->vertices[j].firstarc = p2;
// } else {
// linkLast(G->vertices[j].firstarc, p2);
// }
p1 = (ArcNode *)malloc(sizeof(ArcNode));
p1->adjvex = j;
p1->nextarc = G->vertices[i].firstarc; // 让p1的指针指向当前顶点指向的结点
G->vertices[i].firstarc = p1; // 将当前顶点的指针指向p1
p2 = (ArcNode *)malloc(sizeof(ArcNode));
p2->adjvex = i;
p2->nextarc = G->vertices[j].firstarc; // 让p2的指针指向当前顶点指向的结点
G->vertices[j].firstarc = p2; // 将当前顶点的指针指向p2
}
printf("创建无向图成功!\n");
}
//
void linkLast(ArcNode *vertice, ArcNode *node) {
ArcNode *p = vertice;
while(p->nextarc)
p = p->nextarc;
p->nextarc = node;
printf("成功\n");
}
// 查找位置
int LocateVex(ALGraph *G, char *str) {
int loc = 0;
for(int i=0; i<100; i++) {
if(!(strcmp(G->vertices[i].data, str))) {
return loc;
}
++loc;
}
return -1;
}
// 输出无向图
void DispGraphAdjList(ALGraph *G) {
int i;
ArcNode *ptr;
printf("邻接表为:\n");
for(i=0; i<G->vexnum; i++) {
printf("%s", G->vertices[i].data);
ptr = G->vertices[i].firstarc;
while(ptr != NULL) {
printf("->%s", G->vertices[ptr->adjvex].data);
ptr = ptr->nextarc;
}
printf("\n");
}
}
int main() {
ALGraph *G = NULL;
printf("开始创建!\n");
CreateUDG(G);
printf("创建结束!\n");
printf("开始输出!\n");
DispGraphAdjList(G);
printf("结束输出!\n");
return 0;
}
输入样例是:
4 4
v0 v1 v2 v3
v0 v1
v0 v2
v0 v3
v2 v3
卡在输出,程序就结束了
求助!感激不尽! |