forked from Zxlove720/c-study
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path2024.4.29.c
136 lines (129 loc) · 2.15 KB
/
2024.4.29.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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct graph
{
char* vertex;
int** edge;
int n;
int edgelines;
}graph;
bool initgraph(graph* g)
{
int i;
int j;
for (i = 0; i < g->n; i++)
{
for (j = 0; j < g->n; j++)
{
g->edge[i][j] = 0;
}
}
for (i = 0; i < g->n; i++)
{
for (j = 0; j < g->n; j++)
{
if (g->edge[i][j] != 0)
{
return false;
}
}
}
return true;
}
void creatgraph(graph* g, int choice)
{
printf("请输入顶点个数\n");
scanf("%d", &g->n);
printf("请输入图中边数\n");
scanf("%d", &g->edgelines);
g->vertex = (char*)malloc(sizeof(char) * g->n);
if (g->vertex == NULL)
{
printf("NULL\n");
return;
}
g->edge = (int**)malloc(sizeof(int*) * g->n);
if (g->edge == NULL)
{
printf("NULL\n");
return;
}
int i;
for (i = 0; i < g->n; i++)
{
g->edge[i] = (int*)malloc(sizeof(int) * g->n);
if (g->edge[i] == NULL)
{
printf("NULL\n");
return;
}
}
if (!initgraph(g))
{
printf("init failed\n");
return;
}
for (i = 0; i < g->n; i++)
{
getchar();
printf("请输入第%d个顶点\n",i + 1);
scanf("%c", &g->vertex[i]);
}
char line1;
char line2;
int j, k;
for (i = 0; i < g->edgelines; i++)
{
getchar();
printf("请输入边的关系\n");
scanf("%c,%c", &line1, &line2);
for (j = 0; j < g->n; j++)
{
for (k = 0; k < g->n; k++)
{
if (g->vertex[j] == line1 - 1 && g->vertex[k] == line2 - 1)
{
g->edge[j][k] = 1;
if (choice == 0)
{
g->edge[k][j] = 1;
}
}
}
}
}
}
void displaygraph(graph* g)
{
system("cls");
printf("邻接矩阵表示为:\n");
printf(" ");
int i;
for (i = 0; i < g->n; i++)
{
printf("%c ", g->vertex[i]);
}
printf("\n");
int j;
for (i = 0; i < g->n; i++)
{
printf("%c ", g->vertex[i]);
for (j = 0; j < g->n; j++)
{
printf("%d ", g->edge[i][j]);
}
printf("\n");
}
}
int main()
{
graph g;
printf("1.有向图 0.无向图\n");
printf("请选择\n");
int choice;
scanf("%d", &choice);
creatgraph(&g, choice);
displaygraph(&g);
}