1147 Heaps (30分)[heap]
程序员文章站
2022-06-07 14:38:59
...
By Jalan
知识工具需求
数据结构和算法
- heap
题干
输入一个堆检测是最大堆最小堆还是不是堆,之后要输出堆的dfs
30分里算水的了吧,可能是那次前面那个出的比较模糊做的补偿.
题解
第一次
思路
- 输入.
- 检测是不是最大堆,是则输出
- 检测是不是最小堆是则输出
- 输出不是堆.
编写用时
20分钟
代码
CPP
#include <bits/stdc++.h>
#include <stdio.h>
#include <vector>
using namespace std;
int m, n;
vector<int> test;
vector<int> postAns;
void postDfs(int i)
{
if (2 * i + 1 < n)
{
postDfs(2 * i + 1);
}
if (2 * i + 2 < n)
{
postDfs(2 * i + 2);
}
postAns.push_back(test[i]);
}
int main(int argc, char const *argv[])
{
scanf("%d%d", &m, &n);
test.resize(n);
for (int i1 = 0; i1 < m; i1++)
{
for (int i = 0; i < n; i++)
{
scanf("%d", &test[i]);
}
//Max
int testIndex = 0;
for (; testIndex < n; testIndex++)
{
if (2 * testIndex + 1 < n)
{
if (test[testIndex] < test[2 * testIndex + 1])
{
break;
}
}
if (2 * testIndex + 2 < n)
{
if (test[testIndex] < test[2 * testIndex + 2])
{
break;
}
}
}
if (testIndex == n)
{
printf("Max Heap\n");
postAns.clear();
postDfs(0);
for (int i = 0; i < n - 1; i++)
{
printf("%d ", postAns[i]);
}
printf("%d\n", postAns[n - 1]);
continue;
}
//Min
testIndex = 0;
for (; testIndex < n; testIndex++)
{
if (2 * testIndex + 1 < n)
{
if (test[testIndex] > test[2 * testIndex + 1])
{
break;
}
}
if (2 * testIndex + 2 < n)
{
if (test[testIndex] > test[2 * testIndex + 2])
{
break;
}
}
}
if (testIndex == n)
{
printf("Min Heap\n");
postAns.clear();
postDfs(0);
for (int i = 0; i < n - 1; i++)
{
printf("%d ", postAns[i]);
}
printf("%d\n", postAns[n - 1]);
continue;
}
//Not
printf("Not Heap\n");
postAns.clear();
postDfs(0);
for (int i = 0; i < n - 1; i++)
{
printf("%d ", postAns[i]);
}
printf("%d\n", postAns[n - 1]);
}
return 0;
}
运行用时
结尾
看在我写了这么多注释的份上可以给我点个赞嘛,求求惹=]砰砰砰,给我加点写下去的油呀
@aaa@qq.com
也欢迎关注我的CSDN账号呀=]
**开心code每一天**
上一篇: 甲级PAT1002