xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

資源簡(jiǎn)介

下棋屬于一種博弈游戲,博弈過(guò)程可以用樹(shù)(博弈樹(shù))來(lái)表示。假設(shè)游戲由兩個(gè)人( A 和 B )玩,開(kāi)始由某個(gè)人從根結(jié)點(diǎn)開(kāi)始走,兩個(gè)人輪流走棋,每次只能走一步, 下一步棋只能選擇當(dāng)前結(jié)點(diǎn)的孩子結(jié)點(diǎn),誰(shuí)先走到葉子結(jié)點(diǎn)為勝。例如,對(duì)于下圖所示的博弈樹(shù),若 A 先走,可以選 f , B 若選 h ,則 A 選 j 勝。 編寫一程序,讓計(jì)算機(jī)和人下棋。當(dāng)計(jì)算機(jī)走下一步時(shí),可以根據(jù)以下情況決定下一步: (1) 若存在可以確保取勝的一個(gè)孩子結(jié)點(diǎn),則選擇該結(jié)點(diǎn)作為下一步; (2) 若存在多個(gè)可以確保取勝的孩子結(jié)點(diǎn),則選擇其中高度最小的結(jié)點(diǎn)作為下一步(若有多個(gè)選擇,則選最左邊的結(jié)點(diǎn)); (3) 若不存在可以確保取勝的一個(gè)孩子結(jié)點(diǎn),則選擇高度最大的孩子結(jié)點(diǎn)作為下一步(若有多個(gè)選擇,則選最左邊的結(jié)點(diǎn)); 例: (下面的黑體為輸入) (a,(b,(x)),(c,(d),(e,(g),(h)),(f))) a b x c d e g h f Who play first(0: computer; 1: player )? 1 player: c computer: d Sorry, you lost. Continue(y/n)? y Who play first(0: computer; 1: player )? 1 player: x illegal move. player: b computer: x Sorry, you lost. Continue(y/n)? y Who play first(0: computer; 1: player )? 0 computer: c player: f Congratulate, you win. Continue(y/n)? n

資源截圖

代碼片段和文件信息

#include
#include
#include

char?tree[200]IllegalMove[20];

typedef?struct?ChildList*?Child;

typedef?struct?NODE
{
char?Name;
char?Pure;?//高度是否純奇數(shù)?或?純偶數(shù)。
int?Height;?//該樹(shù)的高度
struct?NODE?*?Father;?//父節(jié)點(diǎn)
Child?List;?//孩子節(jié)點(diǎn)
}*Tree;
struct?ChildList
{
Tree?SubTree;
Child?Next;
};
Tree?PeoVsBot;
void?AddASubTree(Tree?father?Tree?child)
{
Child?TempCell;
TempCell?=?(Child)malloc(sizeof(struct?ChildList));
TempCell->SubTree?=?child;
TempCell->Next?=?father->List;
father->List?=?TempCell;
}
Tree?CreateTree(char?name?Tree?Father)
{
Tree?ATree;
ATree?=?(Tree)malloc(sizeof(struct?NODE));
ATree->Father?=?Father;
ATree->Height?=?0;
ATree->List?=?NULL;
ATree->Name?=?name;
ATree->Pure?=?1;
if?(Father?!=?NULL)
{
AddASubTree(Father?ATree);
}
return?ATree;
}
void?PrintStr(char?s[])
{
int?len?i;
len?=?strlen(s);
for?(i?=?0;?i? {
if?(s[i]?==?‘?‘)?putchar(NULL);
else?printf(“%c“?s[i]);
}
printf(“\n“);
}
int?PrintTree(int?father?int?height?Tree?GrandFather)//當(dāng)前節(jié)點(diǎn)(下標(biāo))是father,GrandFather是當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)地址
{
int?i;
for?(i?=?0;?i? {
putchar(NULL);
putchar(NULL);
putchar(NULL);
putchar(NULL);
}
printf(“%c\n“?tree[father]);
Tree?CurrentNode;
CurrentNode?=?CreateTree(tree[father]?GrandFather);
if?(height?==?0)
{
PeoVsBot?=?CurrentNode;
}
for?(i?=?father?+?1;?1;?i++)
{
if?(tree[i]?==?‘)‘)
{
//修改grandfather的heightpure?//樹(shù)的根沒(méi)有father
if?(CurrentNode->Father?!=?NULL)
{
if?(CurrentNode->Father->Height?==?0)
{
CurrentNode->Father->Height?=?CurrentNode->Height?+?1;
}
else
{
if?(CurrentNode->Father->Pure?==?1?&&?((CurrentNode->Height+1)?%?2?!=?CurrentNode->Father->Height?%?2))
{
CurrentNode->Father->Pure?=?0;
}
if?(CurrentNode->Height?+?1?>?CurrentNode->Father->Height)
{
CurrentNode->Father->Height?=?CurrentNode->Height?+?1;
}
}
}
return?i;//返回這課樹(shù)的結(jié)束的下標(biāo)
}
else?if?(tree[i]?==?‘(‘)//還要判斷輸入是不不是標(biāo)準(zhǔn)的。即函數(shù)判斷()之間是否有節(jié)點(diǎn)
{
i?=?PrintTree(i?+?1?height?+?1?CurrentNode);//子樹(shù)??得到返回值?i
}
}
}

Tree?Bot(Tree?father)//計(jì)算機(jī)操作
{
Child?Temp?=?father->List;
Tree?SureStep?=?NULL?NotSureStep?=?NULL;
while?(Temp?!=?NULL)
{
if?(Temp->SubTree->Pur

評(píng)論

共有 條評(píng)論

相關(guān)資源