#ifndef GRAPH_H_INCLUDED
#define GRAPH_H_INCLUDED
typedef struct node
{
int adjvertex;
int weight;
struct node* next;
}*EdgeNode;
typedef struct vertex
{
int start;
EdgeNode firstedge;
}VertexNode;
struct graph
{
VertexNode adjlist[100];
int numvertex,numedge;
};
typedef struct graph *Graph;
Graph CreateGraph(Graph G);
void Printf(Graph G);
#endif // GRAPH_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include "graph.h"
Graph CreateGraph(Graph G)
{
int i,j,k;
EdgeNode E;
printf("输入顶点数和边数:");
scanf("%d %d",&G->numvertex,&G->numedge);
for(i=0;i <G->numvertex;i++)
{
G->adjlist[i].firstedge =NULL;
G->adjlist[i].start =i;
}
for(k=0; k<G->numedge;k++)
{
printf("输入顶点(vi,vj)的下标号");
scanf("%d %d",&i,&j);
E=(EdgeNode)malloc(sizeof(struct node));
E->adjvertex=j;
E->next =G->adjlist[i].firstedge;
G->adjlist[i].firstedge=E;
E=(EdgeNode)malloc(sizeof(struct node));
E->adjvertex=i;
E->next =G->adjlist[j].firstedge;
G->adjlist[j].firstedge=E;
}
return G;
}
void Printf(Graph G)
{
int i,j,k;
EdgeNode P;
for(i=0;i <G->numvertex;i++)
{
printf("%d--->",G->adjlist[i].start);
P=G->adjlist[i].firstedge;/**< 不能是P=G->adjlist[i].firstedge->next,如此则少打印顶点 */
while(P)
{
printf("%d->",P->adjvertex);
P=P->next;
}
printf("\n");
}
}
#include <stdio.h>
#include <stdlib.h>
#include "graph.c"
int main()
{
Graph G=(Graph)malloc(sizeof(struct graph));
G=CreateGraph(G);
Printf(G);
return 0;
}