用鄰接表實現無向圖的創建與輸出


 1 #include<stdio.h>
 2 #include <iostream>
 3 #include<algorithm>
 4 using namespace std;
 5 #define MVNum 100
 6 typedef struct ArcNode // 邊表結點
 7 {
 8     int adjvex;    // 鄰接點域,存儲該頂點對應的下標
 9     //int info;      //用於存儲權值,對於非網圖可以不需要
10     struct ArcNode *nextarc; // 鏈域,指向下一個鄰接點
11 }ArcNode;
12 typedef struct VNode // 頂點表結點
13 {
14     char data; // 頂點域,存儲頂點信息
15     ArcNode *firstarc; // 邊表頭指針
16 }VNode, AdjList[MVNum];
17 typedef struct
18 {
19     AdjList vertices;
20     int vexnum,arcnum; // 圖中當前頂點數和邊數
21 }ALGraph;
22 
23 int LocateVex(ALGraph &G,char v)//找到v在鄰接表G中的位置
24 {
25     for(int i=0;i<G.vexnum;i++)
26     {
27         if(G.vertices[i].data==v)
28             return i;
29     }
30     return -1;
31 }
32 void  CreateALGraph(ALGraph &G)
33 {
34     int i,j,k,v;
35     char v1,v2;
36     ArcNode *p1,*p2;
37     scanf("%d%d",&G.vexnum,&G.arcnum); // 輸入頂點數和邊數
38     for(v = 0;v < G.vexnum;v++) // 讀入頂點信息,建立頂點表
39     {
40         scanf("%s",&G.vertices[v].data);     // 輸入頂點信息
41         G.vertices[v].firstarc=NULL;     // 將邊表置為空表
42     }
43     getchar();
44     for(k = 0;k < G.arcnum;k++)// 建立邊表
45     {
46         scanf("%c %c",&v1,&v2);
47         getchar();
48         i=LocateVex(G,v1);
49         j=LocateVex(G,v2);
50         p1=new ArcNode; // 向內存申請空間,生成邊表結點
51         p1->adjvex=j;    // 鄰接序號為j
52         p1->nextarc=G.vertices[i].firstarc;    //將e的指針指向當前頂點上指向的結點
53         G.vertices[i].firstarc=p1;            // 將當前頂點的指針指向e
54 
55         p2=new ArcNode; // 向內存申請空間,生成邊表結點
56         p2->adjvex=i;    //鄰接序號為i
57         p2->nextarc=G.vertices[j].firstarc;    // 將e的指針指向當前頂點上指向的結點
58         G.vertices[j].firstarc=p2;        // 將當前頂點的指針指向e
59     }
60 }
61 void DispGraphAdjList(ALGraph &G)
62 {
63     int i;
64     ArcNode *p;
65     for(i=0;i< G.vexnum;i++)
66     {
67         printf("%c",G.vertices[i].data);
68         for(p=G.vertices[i].firstarc;p!=NULL;p=p->nextarc)
69             printf("->%c",p->adjvex+'A');
70         printf("\n");
71     }
72 }
73 int main(void)
74 {
75     ALGraph G;
76     CreateALGraph(G);
77     DispGraphAdjList(G);
78     return 0;
79 }

如上圖所示的無向圖(鄰接表創建):

輸入:

8 9
A B C D E F G H
A B
B D
B E
E F
D F
A C
C G
C H
G H

輸出:

A->C->B
B->E->D->A
C->H->G->A
D->F->B
E->F->B
F->D->E
G->H->C
H->G->C

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM