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
| #include <stdio.h>
#define MAXVEX 100 #define INFINITY 65535
bool visited[MAXVEX]; typedef char VertexType; typedef int EdgeType; typedef int InforType;
typedef struct Graph{ VertexType vexs[MAXVEX]; EdgeType arc[MAXVEX][MAXVEX]; int numVertexes, numEdge; }Graph;
int locates(Graph *g, char ch) { int i; for(i = 0; i < g->numVertexes; i++) { if(g->vexs[i] == ch) break; } if(i >= g->numVertexes) return -1; return i; }
void CreatGraph(Graph *g) { int i, j, k, w; printf("输入顶点数和边数:\n"); scanf("%d %d", &(g->numVertexes), &(g->numEdge)); getchar(); for(i = 0; i < g->numVertexes; i++) { scanf("%c", &(g->vexs[i])); } getchar(); for(i = 0; i < g->numVertexes; i++) { for(j = 0; j < g->numVertexes; j++) { g->arc[i][j] = INFINITY; } } for(k = 0; k < g->numEdge; k++) { char p, q; printf("输入边(vi,vj)上的下标i,下标j和权值:\n"); scanf("%c %c %d", &p, &q, &w); getchar(); int m = locates(g, p); int n = locates(g, q); if(n == -1 || m == -1) { printf("There is no this Vertex !\n"); return ; } g->arc[m][n] = w; g->arc[n][m] = g->arc[m][n]; } }
void printGraph(Graph g) { int i, j; for(i = 0; i < g.numVertexes; i++) { for(j = 0; j < g.numVertexes; j++) { printf("%d ", g.arc[i][j]); } printf("\n"); } }
void DFS(Graph g, int i) { visited[i] = true; printf("%c ", g.vexs[i]); for(int j = 0; j < g.numVertexes; j++) { if(g.arc[i][j] == 1 && !visited[j]); DFS(g, j); } }
void DFSTraverse(Graph g) { for(int i = 0; i < g.numVertexes; i++) visited[i] = false; for(int i = 0; i < g.numVertexes; i++) { if(!visited[i]) DFS(g, i); } }
int main() { Graph g; CreatGraph(&g); printGraph(g); return 0; }
|