#include"stdio.h"
#include"malloc.h"
#define SIZE 10
typedef struct edgeNode{ //边节点
int pos;
int value;
struct edgeNode *next;
}edgeNode;
typedef struct vexNode{ //顶点节点
int data;
edgeNode *firstNode;
}Vexs[SIZE];
typedef struct{ //图
int e_num; //边数
int v_num; //顶点个数
Vexs vex_arcs; //邻接表
}Graph;
void build(Graph *ph){
printf("输入顶点个数:");
scanf("%d",&ph->v_num);
printf("输入边数:");
scanf("%d",&ph->e_num);
//顶点节点
for(int i=1; i<=ph->v_num; i++){
printf("第%d个顶点:",i);
scanf("%d",&(ph->vex_arcs[i].data));
ph->vex_arcs[i].firstNode = NULL;
}
//头插法,把相应的边插入到顶点之后
for(int m=0; m<ph->e_num; m++){
int i,j,value;
printf("第%d条边:",m+1);
scanf("%d %d %d",&i,&j,&value);
edgeNode *NewEdgeNode1 = (edgeNode *)malloc(sizeof(edgeNode));
NewEdgeNode1->pos = j;
NewEdgeNode1->value = value;
NewEdgeNode1->next = ph->vex_arcs[i].firstNode;
ph->vex_arcs[i].firstNode = NewEdgeNode1;
edgeNode *NewEdgeNode2 = (edgeNode *)malloc(sizeof(edgeNode));
NewEdgeNode2->pos = i;
NewEdgeNode2->value = value;
NewEdgeNode2->next = ph->vex_arcs[j].firstNode;
ph->vex_arcs[j].firstNode = NewEdgeNode2;
}
}
void show(Graph *ph){
for(int i=1; i<=ph->v_num; i++){
printf("%d",ph->vex_arcs[i].data);
edgeNode *p = ph->vex_arcs[i].firstNode;
while(p){
printf("->");
printf("%d",p->pos);
p=p->next;
}
printf("\n");
}
}
int main(){
Graph graph;
build(&graph);
show(&graph);
return 0;
}
05-16
8837
11-11
5197