• 邻接矩阵创建图,深度优先搜索


    #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("输入顶点数和边数:
    ");
        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:
    ");
            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("
    深度遍历:");
        DFSTraverse(G);
        return 0;
    }
  • 相关阅读:
    解决IE8下VS2005,VS2008一些向导提示脚本错误问题
    12-7
    12.4
    写在十一月的尾巴
    11.28
    htm&css 颜色的浮动
    11.27
    11.26
    html基础——表格练习
    html基础——div/span
  • 原文地址:https://www.cnblogs.com/sky-z/p/4646046.html
Copyright © 2020-2023  润新知