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
- C++中图的简单表示法
- 简单的图邻接矩阵表示
- C语言中数据类型的表示范围
- C语言中负数怎么表示的?
- 图的表示法
- 图的表示法
- C的二进制表示
- 如何在Xcode4.4中使用Objective-C的对象下标表示法
- c语言中int的表示范围是-32768~32767!
- x86 C中各种整型表示的范围
- c语言中浮点数的表示形式
- c语言中不同格式的表示方法
- C语言 统计整数二进制表示中1的个数
- c语言 统计整数二进制表示中1的个数
- C语言中不同进制数的输入输出及表示方法
- 原码,补码,c中各类型表示的范围
- C语言 统计整数二进制表示中1的个数
- C语言中个各个进制的表示方法
- MyEclipse集成Gradle
- PKU1003 Hangover(水题)
- 蓝桥杯——生物芯片
- 大整数加减法
- java中的SPI机制
- C++中图的简单表示法
- 块元素设置inline属性不能设置宽高的解决办法
- 为整个window添加背景遮罩
- Android MarginLeft与MarginStart的区别
- matlab和C混合编程实现脉冲压缩
- 大数据分析师的卓越之道
- 山东省第四届ACM省赛题——Square Number(平方数的性质)
- java中ListView的item点击事件监听拟人理解。
- ubuntu下编写及运行C程序