C++中图的简单表示法

 2023-09-07 阅读 20 评论 0

摘要:在C++中,我们表示图的方法一般都是用链接矩阵或者连接表,这两种表示方法比较常见,但是另外一种用结构体来表示图的方法其实更加简单,而且也很省内存,与连接表法有些类似,但coding起来比较简单。 int tot; //记录当前

        在C++中,我们表示图的方法一般都是用链接矩阵或者连接表,这两种表示方法比较常见,但是另外一种用结构体来表示图的方法其实更加简单,而且也很省内存,与连接表法有些类似,但coding起来比较简单。

      

int tot;                                    //记录当前边的数量  
int head[100];                              //记录以n为起点的第一条边对应的边e的编号
int flag[100];                              //标记某个顶点是否被访问过struct arc{                                 //边的表示int end;                            //边的终止节点int next;                           //同起点的下一条边的编号arc(int x=0,int y=-1){              //结构体构造函数,默认是publicend=x;next=y;}
}e[100];                                    //边的数组void addE(int u,int v){                     //新建一条边,以u为起点,以v为终点e[tot]=arc(v,head[u]);              //head[u]为有记录的上一条以u为起点的边的编号head[u]=tot;                        //更新head[u],head[u]记录的是最近的一条以u为起点的边tot++;
}void visit(int s){printf("%d",s);flag[s]=1;
}void dfs(int s){                            //深度优先遍历visit(s);for(int i=head[s];i!=-1;i=e[i].next){if(!flag[e[i].end])dfs(e[i].end);}
}int main(){int u,v;memset(head,-1,sizeof(head));        //初始化以任意一个节点为起点的最近的边的编号为-1memset(flag,0,sizeof(flag));            while(scanf("%d %d",&u,&v)!=EOF){addE(u,v);                   //建边}dfs(0);return 0;
}

机器数中零的表示形式唯一、

        这个代码个邻接表很像,都是通过head[n]来找到一条以n为起点的边,然后根据边中的next来找其他边。但是还是有一点区别的,邻接表中,是按图中逆时针顺序将每一条边加入到节点对应的链表中,而上述表示法是顺时针添加。

        理解时最好画一个简单的图来演示一遍更能深刻理解!

图的十字链表、

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/11936.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息