邻接表保存图
来源:互联网 发布:易烊千玺水平知乎 编辑:程序博客网 时间:2024/05/21 20:28
先来一张图表示下大概的保存形式:
如同上图:下面代码给出详细的解释,代码是根据HDU2376写的:
#include<stdio.h>#include<iostream>#include<string.h>using namespace std;#define maxn 10010struct Node{ int v,next,value;//v是结点,next是记录与i相连的下一个节点所在边的下标} edge[maxn*2+10]; //记录边int head[maxn]; //head[i]的i是头节点,head[i]记录的是与i相连的结点的下一条边double ans[maxn];int sum[maxn];int kk;int ss;int n;void add(int fa,int son,int value){ edge[kk].v=son; //记录新边 edge[kk].value=value; edge[kk].next=head[fa];//增加结点,新边的next是上一条边的下标 head[fa]=kk++;//更新head[fa]的指向,并且总边数++}void dfs(int root,int fa){ sum[root]=1; for(int i=head[root];i!=-1;i=edge[i].next) { int son=edge[i].v; if(son==fa) continue; dfs(son,root); sum[root]+=sum[son]; ans[root]+=ans[son]+(double)sum[son]*(n-sum[son])*edge[i].value; }}int main(){ int t; scanf("%d",&t); while(t--) { memset(head,-1,sizeof(head)); memset(ans,0,sizeof(ans)); scanf("%d",&n); kk=1; int a,b,c; for(int i=0; i<n-1; i++) { scanf("%d%d%d",&a,&b,&c); add(a,b,c); add(b,a,c); } dfs(0,-1); ss=n*(n-1)/2; printf("%llf\n",(double)ans[0] / ss); } return 0;}
0 0
- 邻接表保存图
- 用邻接表保存图
- poj1511 spfa(反向保存)+邻接表
- 图的邻接表
- 图的邻接表
- 图的邻接表
- c++ 图(邻接表)
- 图 邻接表
- 图的邻接表
- 图-----邻接表
- 图 邻接矩阵 邻接表
- 图的邻接表
- 邻接表与图
- 图(邻接表)
- 邻接表创建图
- 图的邻接表
- 图的邻接表
- 图的邻接表
- Java中的Collections用来给集合排序
- Oracle中NUMBER类型问题
- 时间复杂度和空间复杂度详解
- 【Leetcode】之Valid Parentheses
- 欢迎使用CSDN-markdown编辑器
- 邻接表保存图
- 策略模式(Strategy模式)
- Android之WindowManager实现悬浮按钮
- iOS新建PCH文件路径找不到的问题解决办法
- AndroidUI设计——Gridview
- spoj 1811 Longest Common Substring(后缀自动机)
- 桑基图(sankey)的绘制
- Mysql 定时任务 事件处理存储过程详解
- Android布局中的尺寸单位介绍