- 邻接矩阵
输入格式:
Nv,Ne //定点数,边数
V1,V2,weight //一条边权重
1 typedef struct GNode *PtrToGNode;
2 struct GNode{
3 int Nv;//node number
4 int Ne;//edge number
5 int G[maxvertexnumber][maxvertexnumber];//matrix
6 //int Data[maxvertexnumber]; data
7 }
8 typedef PtrToGNode MGraph;
9 //初始化一个有Nv个顶点,没有边的图
10 MGraph CreatGraph(int Nv){
11 int V,W;
12 MGraph Graph;
13 Graph=(MGraph)malloc(sizeof(struct GNode));
14 Graph->Nv=Nv;
15 Graph->Ne=0;
16 for(V=0;V<Graph->Nv;V++){
17 for(W=0;W<Graph->Nv;W++){
18 Graph->G[V][W]=0;
19 }
20 }
21 return Graph;
22 }
23 //向图中插入边
24 struct ENode{
25 int V1,V2;//两个顶点
26 int weight;//权重
27 }
28 typedef struct ENode *Edge;
29 void InsertEdge(MGraph Graph,Edge E){
30 Graph->G[E->V1][E->V2]=E->weight;
31 //无向图
32 Graph->G[E->V2][E->V1]=E->weight;
33 }
34
35 MGraph BuildGraph(){
36 MGraph Graph;
37 int Nv,i;
38 Edge E;
39 scanf("%d",&Nv);
40 Graph=CreatGraph(Nv);
41 scanf("%d",&(Graph->Ne));
42 if(Graph->Ne!=0){
43 E=(Edge)malloc(sizeof(struct ENode));
44 for(i=0;i<Graph->Ne;i++){
45 scanf("%d %d %d",&(E->V1),&(E->V2),&(E->weight));
46 InsertEdge(Graph,E);
47 }
48 }
49 return Graph;
50 }
2.邻接表(输入格式与上面相同)
1 typedef struct VNode *PtrToVnode;
2 struct VNode{
3 int AdjV; //邻接表一个节点
4 int Weight;
5 PtrToVnode Next;
6 }
7
8 typedef struct PtrNode{
9 PtrToVnode FirstEdge;
10 }AdjList[MaxVertexNumber];
11
12 struct GNode{
13 int Nn,Ne;
14 AdjList G;
15 }
16 typedef struct GNode *LGraph;
17 //初始化一个有Nn个顶点,无边的图
18 CreatGraph(int Nn){
19 int i;
20 LGraph Graph;
21 Graph=(LGraph)malloc(sizeof(struct GNode));
22 Graph->Nn=Nn;
23 Graph->Ne=0;
24 for(i=0;i<Graph->Nn;i++){
25 Graph->G[i].FirstEdge=NULL;
26 }
27 return Graph;
28 }
29
30 struct ENode{
31 int V1,V2;//两个顶点
32 int weight;//权重
33 }
34 typedef struct ENode *Edge;
35
36 void InsertEdge(LGraph Graph,Edge E){
37 PtrToVnode NewNode;
38 NewNode=(PtrToVnode)malloc(sizeof(struct VNode));
39 NewNode->AdjV=E->V2;
40 NewNode->Weight=E->weight;
41 NewNode->next=Graph->G[E->V1].FirstEdge;
42 Graph->G[E->V1].FirstEdge=NewNode;
43 //无向图+
44 NewNode=(PtrToVnode)malloc(sizeof(struct VNode));
45 NewNode->AdjV=E->V1;
46 NewNode->Weight=E->weight;
47 NewNode->next=Graph->G[E->V2].FirstEdge;
48 Graph->G[E->V2].FirstEdge=NewNode;
49 }
50
51 LGraph BuildGraph(){
52 LGraph Graph;
53 int Nn,i;
54 Edge E;
55 scanf("%d",&Nn);
56 Graph=CreatGraph(Nn);
57 scanf("%d",&(Graph->Ne));
58 if(Graph->Ne!=0){
59 E=(Edge)malloc(sizeof(struct ENode));
60 for(i=0;i<Graph->Ne;i++){
61 scanf("%d %d %d",&(E->V1),&(E->V2),&(E->weight));
62 InsertEdge(Graph,E);
63 }
64 }
65 return Graph;
66 }