• 大小: 471KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-14
  • 语言: C/C++
  • 标签: 数据结构  C++    队列  

资源简介

C++(树、队列) 动物游戏的程序是一个简单的机器学习例子,当遇见新的情况时就增加新的动物园到基本知识里。这个改变基本知识的能力,使得动物程序能模仿学习的过程。 动物游戏有两个参与者:玩者和猜者。玩者想出一种动物,由猜者去猜。猜者要问玩者一系列问题,主要是动物的一些特征。通过玩者的答复,猜者尽力去猜玩者想出的动物。猜对了猜者赢,否则,玩者赢。如果玩者所想的动物不在猜者的知识库中,则玩者将新动物的名称及其特征告诉猜者,猜者将新动物添加到知识库中,以便在后继游戏中使用。

资源截图

代码片段和文件信息

#include 
#include     //队列类 
#include 
#include 
#include 
using namespace std;
queueq1q2;

class BinaryTree;//树类 
class BinaryTreeNode;//树节点类 

class BinaryTreeNode
{
friend class BinaryTree;
public:
BinaryTreeNode() { L = NULL; R = NULL; }//构造函数,构造根结点
BinaryTreeNode(string &an BinaryTreeNode *l = NULL BinaryTreeNode *r = NULL);  
//分支结点构造函数,主要使用这个
void GetAn(string & data)const { data=Data; }
    void release();
protected:
string Data; //所有数据 
BinaryTreeNode * L; //左孩子指针
BinaryTreeNode * R;    //右孩子指针 
};

void BinaryTreeNode::release()
{
if (L != NULL)
{
L->release();
delete L;
L = NULL;
}
if (R != NULL)
{
R->release();
delete R;
R = NULL;
}
}

class BinaryTree
{
public:
BinaryTree() { T = NULL; } //构造函数
BinaryTree(BinaryTreeNode*P) { T =P; }
~BinaryTree(); //析构函数
void readfile();
void queuetotree(BinaryTreeNode**);
void expert(BinaryTreeNode*); 
void treetoqueue(BinaryTreeNode*);
void writefile();  
protected:
BinaryTreeNode *T;
};

BinaryTree::~BinaryTree()
{
if (T != NULL)
{
T->release();
delete T;
T = NULL;

}
}
void BinaryTree::treetoqueue(BinaryTreeNode*T)//将二叉树中的内容以前序遍历存入队列 
{
    string str=“#“;
    if (T == NULL)
{
q2.push(str);

return;
}
    q2.push(T->Data);
treetoqueue(T->L);
    treetoqueue(T->R);
}

void BinaryTree::queuetotree(BinaryTreeNode**T)//将队列中的内容以前序遍历生成二叉树 
{
    string str1str2=“#“;
    str1=q1.front();
    q1.pop();
    if (str1 == str2)
        *T = NULL;
    else
    {
        *T = new BinaryTreeNode;
        (*T)->Data = str1;
        queuetotree(&(*T)->L);
        queuetotree(&(*T)->R);   
    }
}

void BinaryTree::expert(BinaryTreeNode *T)//专家提问和推测 用户回答 
{
string str1=“是“str2=“否“str3str4str5; 
while(1)
{
BinaryTreeNode *N;
N=T;
while(1)
{
cout<<“是否“<Data<<“?“< cin>>str3;
if(N->L==NULL&&N->R==NULL)
{ if(str3==str1)
{
cout<<“专家已猜出结果,是否重新进行游戏“< cin>>str3;
break;
}
else if(str3==str2)
{
cout<<“专家未猜出结果,请输入动物名称和相关特征“ < cout<<“动物名称“< cin>>str4;
cout<<“相关特征“< cin>>str5;
BinaryTreeNode *X*Y;
X = new BinaryTreeNode;
Y = new BinaryTreeNode;
X->L=X->R=Y->L=Y->R=NULL;
N->L=X;
N->R=Y;
Y->Data=N->Data;
N->Data=str5;
X->Data=str4;
cout<<“专家已掌握知识,是否重新进行游戏“< cin>>str3;
break;  
}
else
{
cout<<“未输入正确字符,请重新输入。“< }
}
else
{
if(str3==str1)
{
N=N->L;
}
else if(str3==str2)
{
N=N->R;
}
else 
{
cout<<“未输入正确字符,请重新输入。“< }
}
}
if(str3==str2) break;
}
}


void BinaryTree::readfile()//读取文件中的内容存入队列 
{
std::ifstream fin(“知识库.txt“ std::ios::in);
char

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        3948  2019-05-28 10:57  动物学习新.cpp
     文件     2053720  2019-06-08 11:46  动物学习新.exe
     文件          90  2019-05-27 20:54  知识库.txt

评论

共有 条评论