广搜法极大极小搜索(黑白棋片段)

来源:互联网 发布:p2p平台数据分析指标 编辑:程序博客网 时间:2024/06/03 19:53

Problem A

极大极小搜索

时限:1000ms 内存限制:10000K 总时限:3000ms

描述:

搜索n层,第一层取最大值,先输入两个整数n、randseed,用randseed设置随机数种子。
搜索时每层4个分支,能不能想这个分支走用函数canmoveto()判断,内容如下:
int canmoveto(int m, int dire)
{
return(rand() % 2);
}
评估函数用
int evaluation()
{
return(rand() % 21 - 10);
}

输入:

先输入两个整数n、randseed,

输出:

输出用极大极小搜索n层后的返回的最优值。

输入样例:

6 1234

输出样例:

2

#include<stdio.h>#include<stdlib.h>

int bfs(int m,int mark);

int canmoveto(int m,int dire);
int evaluation();

int main()
{
int n,randseed;
scanf("%d%d",&n,&randseed);
srand(randseed);
printf("%d\n",bfs(n,1));
return 0;


int bfs(int m,int mark)
{
int i;
int value;
int maxvalue=-10;
if(m==0)
{
return(evaluation());
    }
else 
{
for(i=0;i<4;i++)
{
if(canmoveto(m,i))
{
value=bfs(m-1,mark*(-1));
if(value*mark>maxvalue)
{
maxvalue=value*mark;
}

}

}
}
return maxvalue*mark;
}


int canmoveto(int m, int dire)
{
   return(rand() % 2);
}


int evaluation()
{
   return(rand() % 21 - 10);
}