|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
卡在输出,程序就结束了
求助!感激不尽! |
|