zoukankan      html  css  js  c++  java
  • 基础实验4-2.5 关于堆的判断 (25分)---建小顶堆

     解题思路:

    1、边输入边建小顶堆(下标从1开始)

    2、判断

         1)、根结点则下标为1

         2)、若为兄弟结点,则两者双亲结点相同

         3)、儿子结点下标/2=双亲结点下标(注意:用 ‘/‘ 不用 ’*‘)

    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    #define Max 1010
    int arr[2]= {0};
    int n,m;
    void Adjust(int a[],int k,int n) {//向下调整堆
    	a[0]=a[k];
    	int i;
    	for(i=2*k; i<=n; i*=2) {
    		if(i<n&&a[i]>a[i+1])
    			i++;
    		if(a[0]<=a[i])break;
    		else {
    			a[k]=a[i];
    			k=i;
    		}
    	}
    	a[k]=a[0];
    }
    void BuildHeap(int a[],int n) {//建小顶堆
    	int i;
    	for(i=n/2; i>0; i--) {
    		Adjust(a,i,n);
    	}
    }
    int find(int tmp,int a[]) {//获取下标
    	int i;
    	for(i=1; i<=n; i++) {
    		if(a[i]==tmp) {
    			return i;
    		}
    	}
        return -1;
    }
    void Out(int tag,int a[]) {//判断命题
    	int i;
    	int flag=0;
    	if(tag==1) {
    		if(find(arr[0],a)==1)
    			flag=1;
    	} else if(tag==2) {
    		if(find(arr[0],a)/2==find(arr[1],a)/2)
    			flag=1;
    	} else if(tag==3) {
    		if(find(arr[1],a)/2==find(arr[0],a))
    			flag=1;
    	} else if(tag==4) {
    		if(find(arr[1],a)==find(arr[0],a)/2)
    			flag=1;
    	}
    	printf("%c
    ",flag?'T':'F');
    }
    
    int main() {
    
    	scanf("%d %d",&n,&m);
    	int * a=(int *)malloc(sizeof(int)*Max);
    	int i;
    	for(i=1; i<=n; i++) {
    		scanf("%d",&a[i]);
    		BuildHeap(a,i);
    	}
    	char c[10],c1[10],c2[10];
    	int tag;
    	for(i=0; i<m; i++) {//字符处理
    		scanf("%d %s",&arr[0],&c);
    		if(!strcmp(c,"and")) {
    			tag=2;
    			scanf("%d %s%s",&arr[1],&c1,&c2);
    			Out(tag,a);
    			continue;
    		}
    		scanf("%s",&c);
    		if(!strcmp(c,"a")) {
    			tag=4;
    			scanf("%s%s%d",&c1,&c2,&arr[1]);
    			Out(tag,a);
    			continue;
    		}
    		scanf("%s",&c);
    		if(!strcmp(c,"parent")) {
    			tag=3;
    			scanf("%s%d",&c1,&arr[1]);
    			Out(tag,a);
    
    			continue;
    		}
    		if(!strcmp(c,"root")) {
    			tag=1;
    			Out(tag,a);
    			continue;
    		}
    
    	}
    	return 0;
    }
    

      

    勤能补拙,熟能生巧
  • 相关阅读:
    mooc-IDEA 项目/文件之间跳转--002
    003--PowerDesigner创建索引与外键
    002--PowerDesigner显示注释comment
    001--PowerDesigner连接MySQL
    如果说需要注册数据中心,这样才能使用demo部署数据中心license证需要申请,使用云之间-工作流程......
    eas之如何获取当前用户
    eas之f7
    eas之打开窗体
    eas之怎么设置单据保存或者提交完不跳到下个新增页面
    eas之EntityViewInfo对象mainQuery中查询条件
  • 原文地址:https://www.cnblogs.com/snzhong/p/12448202.html
Copyright © 2011-2022 走看看