#include <stdio.h> #include <string.h> #define MAXSIZE 20 #define INITVALUE 65535 #define FALSE 0 #define TRUE 1 typedef struct { int vexs[MAXSIZE]; int arcs[MAXSIZE][MAXSIZE]; int numVexs, numArcs; }Graph; int visited[MAXSIZE]; int LocatePos (Graph *G, int m) { int i; for(i = 0; i < G->numVexs; i++) { if(m == G->vexs[i]) { break; } } return i; } void CreatGraph (Graph *G) { int i, j, weight, m, n, vex, v1, v2; printf("Enter numVexs&numArcs:"); scanf("%d%d", &(G->numVexs), &(G->numArcs)); for(i = 0; i < G->numVexs; i++) { printf("Enter %d data:", i+1); scanf("%d", &vex); G->vexs[i] = vex; } for(i = 0; i < G->numVexs; i++) { for(j = 0; j < G->numVexs; j++) { G->arcs[i][j] = INITVALUE; } } for(i = 0; i < G->numArcs; i++) { printf("Enter i&j&weight:"); scanf("%d%d%d", &v1, &v2, &weight); m = LocatePos(G, v1); n = LocatePos(G, v2); G->arcs[m][n] = weight; G->arcs[n][m] = G->arcs[m][n]; } } void PrintGraph (Graph *G) { int i, j; for(i = 0; i < G->numVexs; i++) { for(j = 0; j < G->numVexs; j++) { printf("%d ", G->arcs[i][j]); } printf("\n"); } } void DFS (Graph *G, int i) { int j; visited[i] = TRUE; printf("%d\n", G->vexs[i]); for(j = 0; j < G->numVexs; j++) { if(G->arcs[i][j] != INITVALUE && !visited[i]) { DFS(G, j); } } } void DFSTRAVSERAL (Graph *G) { int i; for(i = 0; i < G->numVexs; i++) { visited[i] = FALSE; } for(i = 0; i < G->numVexs; i++) { if(!visited[i]) { DFS(G, i); } } } int main () { Graph G; CreatGraph(&G); PrintGraph(&G); DFSTRAVSERAL(&G); return 0; }
图-邻接矩阵
最新推荐文章于 2024-02-17 00:37:04 发布