4#include#include #define max 10000int edge[1000000][2]={0};typedef struct _enode //边表 { //int dis; int vex; struct _enode* nextedge;}enode; typedef struct _vnode //点表 { int vex; enode* firstedge;}vnode; typedef struct _pic { int vex_num; int edge_num; vnode node[max];}pic; void find_insert(enode* edge,enode* temp) //插入边 { enode* p; p=edge; while(p->nextedge!=NULL) p=p->nextedge; p->nextedge=temp;} pic* create_pic() //创建表 { int i=0,c1,c2; enode* node_temp; pic* picture; picture=(pic*)malloc(sizeof(pic)); picture->edge_num=5; picture->vex_num=3; //5条边,3个点 for(i=1;i<=picture->vex_num;i++) { picture->node[i].vex=i; picture->node[i].firstedge=NULL; } for(i=1;i<=picture->edge_num;i++) { c1=edge[i][0]; c2=edge[i][1]; node_temp=(enode*)malloc(sizeof(struct _enode)); node_temp->vex=c2; node_temp->nextedge=NULL; //开辟空间之后一定要给每一个元素赋值,NULL也要赋值 if(picture->node[c1].firstedge==NULL) { picture->node[c1].firstedge=node_temp; } else { find_insert(picture->node[c1].firstedge,node_temp); } } return picture; } int main(void){ int i=0; pic* picture; for(i=1;i<=5;i++) //输入五条边 { scanf('%d',&edge[i][0]); scanf('%d',&edge[i][1]); } picture=create_pic(); for(i=1;i<=picture->vex_num;i++) //输出 { enode* p; p=(enode*)malloc(sizeof(enode)); if(picture->node[i].firstedge==NULL) printf('error'); else { p=picture->node[i].firstedge; printf('%d ',picture->node[i].vex); while(p!=NULL) { printf('%d ',p->vex); p=p->nextedge; } } printf('\n'); } return 0; }