热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

五、树(下):7.堆中的路径

目录题目描述代码出现的问题和解决方法最大N和M随机,元素取到正负10000监测点超时题目描述将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i&

目录

  • 题目描述
  • 代码
  • 出现的问题和解决方法
    • 最大N和M随机,元素取到正负10000监测点超时


题目描述

将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。

输入格式:
每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。

输出格式:
对输入中给出的每个下标i,在一行中输出从**H[i]**到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。

输入样例:

5 3
46 23 26 24 10
5 4 3

输出样例:

24 23 10
46 23 10
26 10

代码

#include
#define MAXN 1001
#define MINH -10000int H[MAXN],size; //H数组是全局变量,因此才能在Insert函数中修改值 void Create()
{size = 0;H[0] = MINH;
}void Insert(int X)
{int i;for(i=++size;H[i/2]>X;i/=2)H[i] = H[i/2];H[i] = X;
}int main()
{int n,m,x,i,j,s;scanf("%d %d",&n,&m);Create();for(i&#61;0;i<n;i&#43;&#43;){scanf("%d",&x);Insert(x);}for(i&#61;0;i<m;i&#43;&#43;){scanf("%d",&j);s &#61; 0;while(j>&#61;1){if(s) printf(" ");s&#43;&#43;;printf("%d",H[j]);j/&#61;2;}printf("\n");}return 0;}

出现的问题和解决方法

最大N和M随机&#xff0c;元素取到正负10000监测点超时

出现这个问题是因为岗哨H[0]&#61;MINH里的MINH设大了(设成-1000了)&#xff0c;导致循环for(i&#61;&#43;&#43;size;H[i/2]>X;i/&#61;2)不能结束。


推荐阅读
author-avatar
esnard夏_368
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有