赞
踩
算法伪代码
C++代码如下:
#include<bits/stdc++.h> struct tree_node{ int value; bool terminal; }t[100]; int input[] = {3,12,8,2,13,7,9,14,6,1,15,7,2,16,8,3,17,9,4,14,10,4,19,10,4,20,10}; void initiate_tree(){ //初始化三层的三叉树 for(int i=1;i<=13;i++){ t[i].value = 0; t[i].terminal = false; } for(int i=14;i<=40;i++){ t[i].value = input[i-14]; t[i].terminal = true; } } void print_tree(){ //可以打印树 int layer = 1; for(layer=1;layer<=4;layer++) { printf("layer %d: ",layer); int first = (pow(3,layer-1)-1)/2+1; int num =0; while(num<(int)pow(3,layer-1)) { printf("%d ",t[first+num].value); num++; } printf("\n"); } } int MIN_VALUE(int num,int a,int b); int MAX_VALUE(int num,int a,int b){//MAX的决策 if(t[num].terminal) return t[num].value; int v = 0x8fffffff; for(int i =1;i<=3;i++){ //三个儿子 v = MIN_VALUE(3*num-2+i,a,b)<v?v:MIN_VALUE(3*num-2+i,a,b); if(v>b)return v; if(v>a) a = v; } return v; } int MIN_VALUE(int num,int a,int b){//MIN的决策 if(t[num].terminal) return t[num].value; int v = 0x1fffffff; for(int i =1;i<=3;i++){ //三个儿子 v = MAX_VALUE(3*num-2+i,a,b)<v?MAX_VALUE(3*num-2+i,a,b):v; if(v>a)return v; if(v<b) b = v; } return v; } int MINIMAX(){ return MAX_VALUE(1,0x8fffffff,0x1fffffff); } int main(){ initiate_tree(); //print_tree(); int ans = MINIMAX(); printf("%d",ans); system("pause"); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。