-
Notifications
You must be signed in to change notification settings - Fork 0
/
源.c
114 lines (110 loc) · 2.08 KB
/
源.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include<stdio.h>
#include<malloc.h>
#define N 10
//设置的是顶点的那个条
typedef struct node {
int adjvex; //设置邻接点存储位置
struct node* next;
}edge;
typedef struct {
char data; //顶点的符号
edge* first; //指向第一条边
}vex;
typedef struct {
int vexnum; //顶点的数量
int arcnum; //边的数量
vex adj[N]; //顶点的数组
}Graph;
int locate(Graph, char);
void Traverse(Graph* g);
int main() {
Graph G;
int i, judeg;
edge* s;
printf("输入有向图请选择1,输入无向图请选择0:");
if (scanf("%d", &judeg)) {}
printf("请输入顶点个数:");
if (scanf("%d", &G.vexnum) != 1) {
printf("Wrong");
}
printf("请输入边的个数:");
if (scanf("%d", &G.arcnum) != 1) {
printf("Wrong");
}
printf("请输入%d个顶点:", G.vexnum);
for (i = 0; i < G.vexnum; i++) {
if (scanf(" ")) {}
if (scanf("%c", &G.adj[i].data) != 1) {
printf("Wrong");
}
}
//边链表的初始化
for (int i = 0; i < G.vexnum; i++)
{
G.adj[i].first = NULL;
}
//边的录入工作
printf("请输入%d条边:", G.arcnum);
for (i = 0; i < G.arcnum; i++) {
char ch1, ch2;
int m, n;
int Use = 0;
if (scanf(" ")) {}
if (scanf("%c%c", &ch1, &ch2)!=2) {
printf("Wrong");
}
if (judeg == 1) {
m = locate(G, ch1);
n = locate(G, ch2);
s = (edge*)malloc(sizeof(edge));
if (!s) {
exit(0);
}
s->adjvex = n;
s->next = G.adj[m].first;
G.adj[m].first = s;
}
else {
m = locate(G, ch1);
n = locate(G, ch2);
s = (edge*)malloc(sizeof(edge));
if (!s) {
exit(0);
}
s->adjvex = n;
s->next = G.adj[m].first;
G.adj[m].first = s;
s = (edge*)malloc(sizeof(edge));
if (!s)
exit(0);
s->adjvex = m;
s->next = G.adj[n].first;
G.adj[n].first = s;
}
}
Traverse(&G);
return 0;
}
int locate(Graph g, char ch) {
int i;
for (i = 0; i < g.vexnum; i++) {
if (g.adj[i].data == ch)
return i;
}
}
void Traverse(Graph* g) {
edge* s;
s = (edge*)malloc(sizeof(edge));
if (s == NULL)
exit(0);
int n = 0;
for (int i = 0; i < g->vexnum; i++) {
n = 0;
s = g->adj[i].first;
while (s) {
n++;
s = s->next;
}
printf("顶点%c的度是%d\n", g->adj[i].data, n);
}
}