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);
}