• 为图2建立邻接表存储结构,并对实验所建立的邻接表进行深度优先遍历。/验证实验/




    #include
    #include
    #define MAX 100
    #define N 100




    typedef struct 
    {
    char v[N];
    }A;


    typedef struct node                     //邻接表表结点
    {  
        int adjvex;                         //邻接点域
        struct node  * next;                //指向下一个邻接点的指针域
        int juli;                           //表示边上信息
    }EdgeNode;    


       
    typedef struct vnode                  //表头结点
    {   
    A a;                              //存结点信息
        EdgeNode  * firstedge;            //边表头指针
    }VertexNode;


    typedef struct
    {
        VertexNode adjlist[MAX];     
    int visited[MAX];
        int n,e;                                               /*顶点数和边数*/
    }ALGraph;           










    void createALGraph(ALGraph *G)                       //创建邻接表
    {
        printf("请分别输入要访问的城市个数和总共的道路数:\n");//顶点、边
        cin>>G->n>>G->e;   
        printf("定义一个起始城市,输入它,从它开始,按自己规定的顺序依次输入其余城市名称:\n");
        for (int i = 0; i < G->n ; i++)                  //建立有n个顶点的顶点表
        {       
            scanf("%s",G->adjlist[i].a.v);               //读入顶点信息
            G->adjlist[i].firstedge = NULL;              //顶点的边表头指针设为空
        }
    /* EdgeNode *s;
     int m,n;
     printf("请从你定义的起始城市开始,输入每一条道路它所连接的前后的两个城市以及它们的距离:\n");
        for (int k=0; ke; k++)                     
        {
            cin>>G->adjlist->firstedge.juli;
            s = new EdgeNode;                        //生成新边表结点s
            s->adjvex = n;                          //邻接点序号为n
            s->next = G->adjlist[m].firstedge;      //将新边表结点s用头插法插入到顶点Vi 的边表头部
            G->adjlist[m].firstedge = s;
        }*/
    }
     


    void DFSAL(ALGraph *G, int i)                                 //深度优先遍历

        cout<<"第"<adjlist[i].a.v<     G->visited[i]=1;                                          //标记vi已访问
    EdgeNode *p;
        p=G->adjlist[i].firstedge;                                //取vi边表的头指针
        while(p)                                                  //如果p不空,依次搜索vi的邻接点vj
        {
            if (G->visited[p->adjvex]==0)                         //若vj尚未访问,则以vj为出发点向纵深搜索
            DFSAL(G,p->adjvex);
            p=p->next;                                            //找vi的下一个邻接点
        }
    }


    void DFS(ALGraph *G)   
    {
        int i;
        for (i=0; in; i++)
            G->visited[i]=0;    /*标志向量初始化*/
        for (i=0; in; i++)  //vi未访问过,从vi开始DFS搜索
            if (G->visited[i]==0)
             DFSAL(G,i);                
    }




    /*************************************************************/




    int main()
    {  
          printf("2:以邻接表为储存方式的深度优先搜索\n");
                ALGraph G;
       printf("现在开始构建邻接表!\n");
                createALGraph(&G);
       printf("现在开始Depth-First-Search!\n");
                DFS(&G); 


    大同 北京 济南 郑州 西安 太原 石家庄
    大同—北京,其间距离379 大同—太原,其间距离355 北京—济南,其间距离298 北京—石家庄,其间距离283 济南—郑州,其间距离615 济南—石家庄,其间距离298 郑州—西安,其间距离620 郑州—石家庄,其间距离412 西安—太原,其间距离1554 西安—石家庄,其间距离1552 太原—石家庄,其间距离340 
    1 2 379 1 6 355 2 3 298 2 7 283 3 4 615 3 6 298 4 5 620 4 7 412 5 6 1554 5 7 1552 6 7 340
    //队列
    2 379 0
    6 355 1
    3 298 0
    7 283 1
    4 615 0
    6 298 1
    5 620 0
    7 412 1
    6 1554 0
    7 1552 1
    7 340 1

  • 相关阅读:
    hand_git
    React Native适配Xcode 15 iOS 17.0+
    FME&ArcGIS版本兼容性
    【C++】标准流与命名空间简介 ( Visual Studio 2019 中创建 C++ 项目 | iostream 标准流 | std 标准命名空间 | cout 控制台输出 )
    前端面试题:基础理论整理(篇1)
    uniapp项目实践总结(十六)自定义下拉刷新组件
    江苏服务器租用风险有哪些?
    初探Android S 双STA
    CCF- CSP历年认证考试题目链接+题解总结(持续更新)
    SpringBoot课堂笔记20230913
  • 原文地址:https://blog.csdn.net/weixin_41867334/article/details/80797396