图论

您所在的位置:网站首页 图论及其应用张先迪课后答案第二章 图论

图论

2023-12-11 23:34| 来源: 网络整理| 查看: 265

二叉树 存储和权值比较

在这里插入图片描述

int h[N],ne[N*2],e[N*2],w[N],idx; int dep[N]; void add(int x,int y ){ e[idx]=y,//当前节点的下一个节点序号 ne[idx]=h[x],//ne数组保存e数组对应位置的下一个节点所在的索引 h[x]=idx++; } void bfs(int x,int dep)//以深度为单位 { maxn=max(dep,maxn);//记录整个二叉树的最大深度 d[dep]+=w[x]; for(int i=h[x];i!=-1;i=ne[i]){ int j=e[i]; dfs(j,dep+1); } } int main() { int n; cin>>n; for(int i=1;i add(i,2*i); } if(2*i+1 if(d[i]>=d[res]){ res=i; } } cout int hh=0,tt=0;//双指针记录一个队列 q[0]=1;//存储一个队列 memset(d,-1,sizeof d);//记录是否走过 d[0]=1;//d数组里存储的是边的长度 while(hh int j=e[i]; if(d[j]==-1){ d[j]=d[i]+1; q[tt++]=j; } } } return d[n]; }

方法二:利用stl记录一个队列

int h[N],ne[N],e[N],idx; int st[N],dis[N]; void add(int x,int y ){ e[idx]=y,//当前节点的下一个节点序号 ne[idx]=h[x],//ne数组保存e数组对应位置的下一个节点所在的索引 h[x]=idx++; } void bfs() { memset(dist,-1,sizeof dist); dist[0]=1; queue q; q.push(1); st[1]=1; while(!q.empty()){ int t=q.front(); q.pop(); for(int i=h[i];i!=-1;i=ne[i]){ int j=e[i]; while(!st[j]){ dis[j]=dis[i]+1; st[j]=1;//节点入队 q.push(j); } } } } int main() { int n,m; cin>>n>>m; for(int i=0;i int t=u; if(u*2 int n; cin>>n; for(int i=1; i //把最小的元素删掉 cout


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3