邻接矩阵创建图,深度优先搜索
#include "stdio.h" #include "stdlib.h" #define TRUE 1 #define FALSE 0 typedef int Boolean; typedef char VertexType; typedef int EdgeType; #define MAXSIZE 9 #define MAXEDGE 15 #define MAXVEX 9 #define INFINITY 65535 typedef struct { VertexType vexs[MAXVEX]; EdgeType arc[MAXVEX][MAXVEX]; int numVertexes, numEdges; }MGraph; void CreateMGraph(MGraph *G) { int i,j,k,w; printf("输入顶点数和边数:\n"); scanf("%d %d",&G->numVertexes,&G->numEdges); 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->numEdges;k++) { printf("输入边(vi,vj)上的下标i,下标j和权w:\n"); scanf("%d %d %d",&i,&j,&w); G->arc[i][j]=w; G->arc[j][i]= G->arc[i][j]; } } Boolean visited[MAXVEX]; void DFS(MGraph G, int i) { int j; visited[i] = TRUE; printf("%c ", G.vexs[i]); for(j = 0; j < G.numVertexes; j++) if(G.arc[i][j] == 1 && !visited[j]) DFS(G, j); } void DFSTraverse(MGraph G) { int i; for(i = 0; i < G.numVertexes; i++) visited[i] = FALSE; for(i = 0; i < G.numVertexes; i++) if(!visited[i]) DFS(G, i); } int main(void) { MGraph G; CreateMGraph(&G); printf("\n深度遍历:"); DFSTraverse(G); return 0; }