图 的建立之邻接表

 

点击鼠标自动生成顶点,

包括图的深度遍历

 

 

View Code
 1 #include <stdio.h>
2 #include<stdlib.h>
3
4 typedef struct ArcNode
5 {
6 int data;
7 struct ArcNode *nextarc;
8 }ArcNode;
9 typedef struct VexNode
10 {
11 char name[20];
12 struct ArcNode *firstnext;
13 int adjnum;
14 }Vex_Node[20];
15
16
17 typedef struct Graph
18 {
19 Vex_Node vex;
20 int vexnum,arcnum;
21 int kind;
22 }Graph;
23
24
25 void CreateGraph(Graph &g)
26 {
27
28 printf("请输入顶点的个数和弧的个数\n");
29 scanf("%d %d",&g.vexnum,&g.arcnum);
30
31 for(int i=0;i<g.vexnum;i++)
32 {
33 g.vex[i].firstnext = NULL;
34 }
35
36 for(int k=0;k<g.vexnum;k++)
37 {
38
39 printf("请输入顶点信息和邻接节点个数\n");
40 scanf("%s %d",g.vex[k].name,&g.vex[k].adjnum);
41
42 for(int i=0;i<g.vex[k].adjnum;i++)
43 {
44 ArcNode *p = (ArcNode *)malloc(sizeof(ArcNode));
45 p->nextarc = g.vex[k].firstnext; //逆序构建链表
46 g.vex[k].firstnext = p;
47 printf("邻接顶点位置\n");
48 scanf("%d",&p->data);
49 }
50 }
51 }
52
53
54 void Display(Graph &g)
55 {
56
57 for(int i=0;i<g.vexnum;i++)
58 {
59 ArcNode *p = g.vex[i].firstnext;
60
61 if(p!=NULL)
62 {
63 printf("边%s %s\n",g.vex[i].name,g.vex[p->data].name);
64 }
65 while(p->nextarc!=NULL)
66 {
67 printf("边%s %s\n",g.vex[i].name,g.vex[p->nextarc->data].name);
68 p = p->nextarc;
69
70 }
71 }
72
73 }
74
75
76 int main()
77 {
78 Graph G;
79 CreateGraph(G);
80 Display(G);
81
82 return 0;
83 }
 
 
posted @ 2011-12-23 17:41  pipicfan  阅读(306)  评论(0编辑  收藏  举报