栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构图--遍历改进

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构图--遍历改进

引言

课上通过数据结构知识,我们能够通过深度优先广度优先去遍历整个图结构。在实验中,friendship两次也均有涉猎,在java语言中实现图这种数据结构的使用同时体会,软件构造过程中的学习,经验和总结。在图中,进一步运用理解java软件构造的内容知识。
那么对于图这种结构,我们通过遍历的优先级,还可以分成贪心等算法,但其基础都为广度和深度优先,那么对于这两种结构都分别用到了栈和队列的概念,通过访问,即可以以这个序列来进行输出,其也为生成树。
但当他图并非联通时,便出现问题,可能会出现多个生成树,平常的广度深度优先便需要改良。

同时,还可以根据遍历的开始节点进行改进。

深度优先:(以c语言为例)
 for(i=0;i
        v=v%n;
        if(!visited[v]){
            treenum++;
            printf("第%d棵树:",treenum);
            fprintf(f,"第%d棵树:",treenum);
            printf("%2d:%3c|",v+1,g.vex[v]);//输出顶点v
            fprintf(f,"%2d:%3c|",v+1,g.vex[v]);
            visited[v]=1;//被访问过
            S[++top]=v;//顶点v进栈
            while(top!=-1){
                v=S[top];//栈顶元素
                for(j=0;j
                    if(visited[j]==0&&g.edge[v][j]==1)//没被访问过且存在边(v,j)
                    {
                        printf("%2d:%3c|",j+1,g.vex[j]);//输出顶点j
                        fprintf(f,"%2d:%3c|",j+1,g.vex[j]);
                        visited[j]=1;
                        S[++top]=j;
                        break;
                    }
                }
                if(j==n) top--;
            }
        }
    }


其逻辑图展示为:

广度优先:(以c语言为例):

LinkQue q;
    setQueue(&q);
    for(i=0;i
        v=v%n;
        if(!visited[v]){
            treenum++;
            printf("第%d棵树:",treenum);
            fprintf(f,"第%d棵树:",treenum);
            enQueue(&q,v);
            printf("%2d:%3c|",v+1,g.vex[v]);//输出顶点v
            fprintf(f,"%2d:%3c|",v+1,g.vex[v]);
            visited[v]=1;
            while(q.front!=q.rear){
                u=deQueue(&q);
                for(j=0;j
                    if(visited[j]==0&&g.edge[u][j]==1)//没被访问过且存在边(u,j)
                    {
                        printf("%2d:%3c|",j+1,g.vex[j]);//输出顶点j
                        fprintf(f,"%2d:%3c|",j+1,g.vex[j]);
                        visited[j]=1;
                        enQueue(&q,j);
                    }
                }
            }
        }
    }

其逻辑图展示为:

对于测试用例测试:

结果:
图的遍历:(以1为遍历起点)

测试2:

结果:

总结

即在原本的基础上进行改进,在过程外围在嵌套一个遍历所有点的循环,即可依次输出生成树。从而解决只能针对于连通图遍历点不一样,进而对于非连通图无法全部遍历的问题,同时还可以根据输入的开始节点进行遍历。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994056.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号