1. 程式人生 > >1155 Heap Paths (30 分)(堆+dfs遍歷)

1155 Heap Paths (30 分)(堆+dfs遍歷)

比較簡單的一題

遍歷左右的時候注意一下

#include<bits/stdc++.h>

using namespace std;
const int N=1e3+10;
int s[N*2];
int cnt=0;
vector<int>t;
vector<int>p[N];
int n;
void dfs(int v)
{
    if(s[v]==-1){
        int i=v/2;
        if(s[i*2]!=-1||s[i*2+1]!=-1){
            return;
        }
        p[cnt
++]=t; return ; } t.push_back(s[v]); dfs(v*2+1); dfs(v*2); t.pop_back(); } int main() { memset(s,-1,sizeof(s)); scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&s[i]); } dfs(1); for(int i=0;i<cnt;i++){ if(i%2==1) continue
; for(int j=0;j<p[i].size();j++){ if(j) printf(" "); printf("%d",p[i][j]); } printf("\n"); } bool Max=false; bool Min=false; for(int i=1;i<n;i++){ if(s[i*2]!=-1){ if(s[i*2]>s[i]) Max=true; } if
(s[i*2+1]!=-1){ if(s[i*2+1]>s[i]) Max=true; } } for(int i=1;i<n;i++){ if(s[i*2]!=-1){ if(s[i*2]<s[i]) Min=true; } if(s[i*2+1]!=-1){ if(s[i*2+1]<s[i]) Min=true; } } if(Max==false){ printf("Max Heap\n"); } else if(Min==false){ printf("Min Heap\n"); } else{ printf("Not Heap\n"); } return 0; }