C++中图的简单表示法

来源:互联网 发布:js统计访问量 编辑:程序博客网 时间:2024/06/06 03:46

        在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来找其他边。但是还是有一点区别的,邻接表中,是按图中逆时针顺序将每一条边加入到节点对应的链表中,而上述表示法是顺时针添加。

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

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝直通车b类扣12分怎么办 淘宝店铺被买家投诉怎么办 淘宝店铺遭买家投诉怎么办 淘宝店铺被买家恶意投诉怎么办 苹果手机无法识别指纹怎么办 淘宝店铺虚假交易违规怎么办 斗鱼直播太卡怎么办 神笔添加视频尺码不符合怎么办 闲鱼卖家单号填错了怎么办 户户通没有信号强度怎么办 全民k歌qq登不上怎么办 手机直播没电了怎么办 淘宝退货卖家拒收怎么办 充的会员卡店家关门了怎么办 淘宝手机号码被注册了怎么办 淘宝不支持七天无理由退货怎么办 微信视频横屏怎么办 房子里潮气太重怎么办 淘宝不小心注销了怎么办 淘宝号不小心注销了怎么办 xp网络驱动没了怎么办 淘宝卖家客服态度差怎么办 怀孕吃辣椒喉咙好痛怎么办 淘宝店铺建议不要提交认证怎么办 淘宝买东西商家不退款怎么办 淘宝买东西商家不发货怎么办 在微信上买东西被骗了怎么办 新浪微博自动关注人怎么办 搜淘宝找不到关键词和店铺怎么办 小超市开在一起竞争太大怎么办 淘宝店铺被投诉盗图怎么办 充电宝ic坏了怎么办 淘宝店宝贝权重下降怎么办 淘宝卖家评分低怎么办 淘宝买东西客服不理人怎么办 支付宝本次交易嫌疑违规怎么办 支付宝一年的交易总额怎么办 交易关闭钱扣了怎么办 交易猫账号绑定支付宝打不开怎么办 拼多多涉假处罚怎么办 淘宝店铺重复铺货扣6分怎么办