#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
typedef struct EdgeNode
{
int adjvex;
int weight;
struct EdgeNode *next;
}EdgeNode;
typedef struct VextexNode
{
int data;
EdgeNode *firstedge;
}VextexNode, Adjlist[MAXSIZE];
typedef struct
{
Adjlist adjlist;
int vexNum, arcNum;
}GraphList;
int LocatPos (GraphList *G, int num)
{
int i;
for(i = 0; i < G->vexNum; i++)
{
if(num == G->adjlist[i].data)
{
break;
}
}
return i;
}
void CreatGraph (GraphList *G)
{
int i, m, n, weight, v1, v2;
EdgeNode *e, *f;
printf("Enter vexNum&arcNum:");
scanf("%d%d", &(G->vexNum), &(G->arcNum));
for(i = 0; i < G->vexNum; i++)
{
printf("Enter %d data:", i+1);
scanf("%d", &(G->adjlist[i].data));
G->adjlist[i].firstedge = NULL;
}
for(i = 0; i < G->arcNum; i++)
{
printf("Enter m&n&weight:");
scanf("%d%d%d", &v1, &v2, &weight);
m = LocatPos(G, v1);
n = LocatPos(G, v2);
e = (EdgeNode *)malloc(sizeof(EdgeNode));
e->adjvex = n;
e->weight = weight;
e->next = G->adjlist[m].firstedge;
G->adjlist[m].firstedge = e;
f = (EdgeNode *)malloc(sizeof(EdgeNode));
f->adjvex = m;
f->weight = weight;
f->next = G->adjlist[n].firstedge;
G->adjlist[n].firstedge = f;
}
}
void PrintGraph (GraphList *G)
{
int i;
EdgeNode *e;
for(i = 0; i < G->vexNum; i++)
{
e = G->adjlist[i].firstedge;
printf("%d", G->adjlist[i].data);
while(e != NULL)
{
printf("-> (%d %d)%d", G->adjlist[i].data, G->adjlist[e->adjvex].data, e->weight);
e = e->next;
}
printf("\n");
}
}
int main ()
{
GraphList G;
CreatGraph(&G);
PrintGraph(&G);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
typedef struct EdgeNode
{
int adjacent;
int weight;
struct EdgeNode *next;
}EdgeNode;
typedef struct
{
int data;
EdgeNode *firstedge;
}VexNode, AdjacList[MAXSIZE];
typedef struct
{
AdjacList adlist;
int vexNum, arcNum;
}Graph;
void CreatGraph (Graph *G)
{
EdgeNode *e;
int i, m, n, weight;
printf("Enter vexNum & arcNum:");
scanf("%d%d", &(G->vexNum), &(G->arcNum));
for(i = 0; i < G->vexNum; i++)
{
printf("Enter vex:");
scanf("%d", &(G->adlist[i].data));
G->adlist[i].firstedge = NULL;
}
for(i = 0; i < G->arcNum; i++)
{
printf("Enter m & n &weight:");
scanf("%d%d%d", &m, &n, &weight);
e = (EdgeNode *)(malloc(sizeof(EdgeNode)));
e->adjacent = n;
e->weight = weight;
e->next = G->adlist[m].firstedge;
G->adlist[m].firstedge = e;
}
}
void PrintGraph (Graph *G)
{
EdgeNode *e;
int i;
for(i = 0; i < G->vexNum; i++)
{
printf("%d", G->adlist[i].data);
for(e = G->adlist[i].firstedge; e != NULL; e = e->next)
{
printf("-<%d %d>%d", G->adlist[i].data, e->adjacent, e->weight);
}
printf("\n");
}
}
int main ()
{
Graph G;
CreatGraph(&G);
PrintGraph(&G);
return 0;
}