http://acm.hdu.edu.cn/showproblem.php?pid=4155
搜索博弈
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int card[8];
char s[30];
int dfs(int sum) // 用来判断判断当前局面即和为sum是否为胜局
{
if(sum==31) return 1; // 剪枝,如果为31 当然为胜局
for(int i=1;i<=6;i++)
if(card[i]&&sum+i<=31) 是否为胜局要经的住对手的检验,即对手可能出任何当前可能出的牌,如果其子局面全为败局的话,才为胜局
{
card[i]--;
//cout<<sum+i<<endl;
int tt=dfs(sum+i);
//cout<<tt<<endl;
card[i]++;
if(tt) return 0;
}
return 1; //全为败局
}
int main()
{
while(scanf("%s",s)==1)
{
printf("%s ",s);
int sum=0;
for(int i=1;i<7;i++)
card[i]=4;
int n=strlen(s);
for(int i=0;i<n;i++)
{
sum+=s[i]-'0';
card[s[i]-'0']--;
}
if(sum>=31)
{
puts(n%2?"A":"B");
}
else
{
if(dfs(sum))
puts(n%2?"A":"B");
else
puts(n%2?"B":"A");
}
}
return 1;
}
本文介绍了一个基于搜索博弈的游戏算法实现,通过深度优先搜索确定玩家在特定情况下的最优选择。该算法考虑了所有可能的走法并评估每一步的胜负状态。
2313

被折叠的 条评论
为什么被折叠?



