数据结构-堆中的路径

136 阅读1分钟

题意理解

代码实现

堆的表示及其操作

#define MAXN 1001
#define MINH -10001
int H[MAXN], size;
void Create ()
{
 size = 0;
 H[0] = MINH;
 /*设置“岗哨”*/
}

void Insert ( int X )
{
 /* 将X插入H。这里省略检查堆是否已满的代码 */
int i;
for (i=++size; H[i/2] > X; i/=2)
    H[i] = H[i/2];
H[i] = X;
}

主程序

int main()
{
1. 读入n和m
2. 根据输入序列建堆
3. 根据输入下标i:打印到根的路径
 return 0;
} 
int main()
{
    int n, m, x, i, j;
    scanf("%d %d", &n, &m);
    Create(); /* 堆初始化 */
    for (i=0; i<n; i++) { /*以逐个插入方式建堆 */
        scanf("%d", &x);
        Insert(x);
    }
    for (i=0; i<m; i++) {
        scanf("%d", &j);
        printf("%d", H[j]);
        while (j>1) { /*沿根方向输出各结点*/
         j /= 2;
         printf(" %d", H[j]);
        }
        printf("\n");
    }
    return 0;
}