zoukankan      html  css  js  c++  java
  • 邻接矩阵实现图的深度优先搜索(2)

    /*树的邻接矩阵的存储结构*/
    #include <stdio.h>
    #include <stdlib.h>
    #define MAXVEX      10
    #define InitEdge    0
    typedef char VertexType;
    typedef int EdgeType;
    typedef struct MGraph
    {
        VertexType vex[MAXVEX];
        EdgeType arc[MAXVEX][MAXVEX];
        int numVertexes;
        int numEdges;
    }MGraph;
    static int Flag[MAXVEX];
    void CreateMGraph(MGraph *G)
    {
        int i = 0,j = 0,k = 0,w = 0,m = 0,n = 0;
        char c;
        printf("请输入顶点数和边数,之间用逗号隔开 :
    ");
        fflush(stdin);
        scanf("%d,%d",&(G->numVertexes),&(G->numEdges));
        printf("请输入顶点的值 :
    ");
        fflush(stdin);
        scanf("%c",&c);
        while(i < G->numVertexes)
        {
            if(c == '
    ')
                break;
            G->vex[i++] = c;
            scanf("%c",&c);
        }
        //邻接矩阵的初始化
        for(i = 0;i < G->numVertexes;i++)                                   //邻接矩阵的初始化,初始化为0
        {
            for(j = 0;j < G->numVertexes;j++)
            {
                G->arc[i][j] = InitEdge;
            }
        }
        for(i = 0;i < G->numVertexes;i++)                                   //标识数组的初始化,0表示未访问过
        {
            Flag[i] = 0;
        }
        fflush(stdin);
        for(m = 0,n = 0,k = 0; k < G->numEdges; k++)
        {
            printf("请输入边(Vi~Vj)的顶点下标i和j,以及权重w:
    ");
            scanf("%d,%d,%d",&m,&n,&w);
            G->arc[m][n] = w;
            G->arc[n][m] = G->arc[m][n];
        }
        printf("
    
    结点中存放的数据为 :
    ");
        for(i = 0;i < G->numVertexes;i++)
        {
            printf("%c ",G->vex[i]);
        }
        printf("
    
    您输入的邻接矩阵为:
    ");
        for(i = 0;i < G->numVertexes;i++)                                 //输出邻接矩阵方便查看输入是否有误
        {
            for(j = 0;j < G->numVertexes;j++)
            {
                printf("%d ",G->arc[i][j]);
            }
            printf("
    ");
        }
        printf("
    
    标示数组的值初始化为 :
    ");
        for(i = 0;i < G->numVertexes;i++)
        {
            printf("%d ",Flag[i]);
        }
    
    }
    void DepthFirstSearch(MGraph *G,int i)
    {
        int j = 0;
        if(Flag[i] == 0)
        {
            printf("%c ",G->vex[i]);
        }
        Flag[i] = 1;
        for(j = 0;j < G->numVertexes;j++)
        {
            if((G->arc[i][j]) != InitEdge && 0 == (Flag[j]))
            {
                DepthFirstSearch(G,j);
            }
        }
    
    }
    
    int main()
    {
        int k = 0;                                      //设置从邻接矩阵的第几行开始DFS搜索,这里从第1行开始
        struct MGraph *G;
        CreateMGraph(G);
        printf("
    **********************************************
    ");
        printf("DFS的排序结果为: 
    ");
        DepthFirstSearch(G,k);
        printf("
    **********************************************
    ");
        return 0;
    }
    

      

  • 相关阅读:
    Java面试——从JVM角度比较equals和==的区别
    Java线程和多线程(三)——线程安全和同步
    玩转Android之MVVM开发模式实战,炫酷的DataBinding!
    写点什么好呢2? 钱、事业、婚姻、人生意义
    写点什么好呢2? 钱、事业、婚姻、人生意义
    大型网站架构技术一览
    【树莓派】GSM900模块
    【Latex】数学公式排版
    【MYSQL】导入中文后乱码问题
    【R】shiny界面
  • 原文地址:https://www.cnblogs.com/devinblog/p/4173792.html
Copyright © 2011-2022 走看看