资源简介
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
- 上一篇:C语言-打字母小游戏
- 下一篇:2.13寸电子墨水屏驱动).zip
相关资源
- 颜色识别形状识别STM103嵌入式代码
- 数据结构 图的遍历源代码
- 数据结构实验源代码集
- 实验报告:数据结构长整数四则运算
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- 数据结构教程李春葆第五版书中例题
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
评论
共有 条评论