初学邻接表
2015-08-04 15:06
176 查看
据说邻接表在图论中用的比较多
//例如输入3 1 2 10;1 3 20;1 4 30; 会输出4 30;3 20;2 10; //输入1 2 10时,edge[0].u=1,edge[0].v=2,edge[0].w=10,edge[0].next=-1;此时head[1]=0,cnt=1; //就是这里,输入1 3 20时,egde[1].u=1,egde[1].v=3,edge[1].w=20,edge[1].next=0;此时head[1]=1,cnt=2; //edge[].next指向的是前一个,相当于链表里的指针的作用 #include<cstdio> #include<cstring> int head[1010]; int cnt; struct node { int u,v,w,next; }edge[1010]; void add(int u,int v,int w)//添加相连边,u为原始点,v为与u相连的点,w为权值 { edge[cnt].u=u; edge[cnt].v=v; edge[cnt].w=w; edge[cnt].next=head[u];//这里指向上一个,查找的时候用到 head[u]=cnt;//上午大神的代码是head[u]=cnt++原来是先赋值再自增,我这渣渣。。。 cnt++; } int main() { int n; while(scanf("%d",&n)&&n) { memset(head,-1,sizeof(head));//head数组初始化为-1 cnt=0;//cnt初始化为0 从0开始放 int u,v,w; while(n--) { scanf("%d%d%d",&u,&v,&w); add(u,v,w); } scanf("%d",&u); for(int i=head[u];i!=-1;i=edge[i].next)//查找所有与u相连的边 {//从后往前查找 int v=edge[i].v; int w=edge[i].w; printf("%d %d\n",v,w); } } return 0; }
相关文章推荐
- 常见OJ评判结果对照表
- win7下面搭建angularjs开发环境
- ROS学习--(十五)记录,回放数据
- [转帖]HOWTO rename column name in Sqlite3 database
- jQuery函数attr()与prop()的区别
- 模积和
- 各种排序算法的总结
- CentOS 6.x 下安装配置 gvim
- 搭建 lamp环境【apache2.4.12 + php5.5.12 + mysql5.6.13】
- OpenGL 矩阵变换(讲的太好了~!)
- error LNK2019: 无法解析的外部符号 六处错误的纠正
- TP-Coupon安装完成后提示系统发生错误的解决办法
- jquery控制显示服务器生成的图片流
- nodejs uuid 生成
- Volley的用法
- leetcode Course Schedule II
- Integration with Parse(IOS)
- ubuntu14.04+cuda7.0环境变量配置
- OC学习笔记12--protocol的使用场景之代理模式
- 南邮 OJ 1108 搜索(一)