#include "Op.h"
#include "GNode/Node.h"
#include "GNode/Tree.h"
#include <queue>
#include <iostream>
using namespace std;
using namespace GNode;
int main() {
int operationOpTotal = 100;
int numberOpTotal = operationOpTotal + 2;
float min = 0.5;
float max = 6.0;
int offset = 1;
auto gepSequence = new Node<Op*>*[operationOpTotal + numberOpTotal];
queue<Node<Op*>*> hungryQueue;
Node<Op*>* workingNode;
Node<Op*>* childNode;
Op* childNodeOp;
int emptyChildNumber;
Op* rootOp = Op::getRandomOptionOp();
while (Op::END == rootOp->getTypeValue()) {
delete rootOp;
rootOp = Op::getRandomOptionOp();
}
auto tree = new Tree<Op*>(rootOp, [](Op* o){delete o;});
// 随机地构建基因序列,开头的都是运算操作符号,后面的都是固定的数字符号
gepSequence[0] = tree->getRoot();
for (int i = 1; i < operationOpTotal; i++) {
gepSequence[i] = tree->create(Op::getRandomOptionOp());
}
for (int i = operationOpTotal; i < operationOpTotal + numberOpTotal; i++) {
gepSequence[i] = tree->create(Op::getRandomNumberOp(min, max));
}
// 构建图
hungryQueue.push(gepSequence[0]);
while (!hungryQueue.empty()) {
workingNode = hungryQueue.front();
hungryQueue.pop();
emptyChildNumber = workingNode->getValue()->getOperandTotal();
while (emptyChildNumber > 0) {
childNodeOp = gepSequence[offset]->getValue();
if (Op::OP_OPERATION == childNodeOp->getOpType()) {
if (Op::END != childNodeOp->getTypeValue()) {
childNode = gepSequence[offset];
hungryQueue.push(childNode);
} else {
offset = operationOpTotal;
childNodeOp = gepSequence[operationOpTotal]->getValue();
childNode = gepSequence[operationOpTotal];
}
} else {
childNode = gepSequence[offset];
}
childNodeOp->setOpAttribute(
workingNode->getValue()->getOperandTotal() - emptyChildNumber == 0 ?
Op::OP_ATTR_LEFT : Op::OP_ATTR_RIGHT
);
workingNode->add(childNode);
offset++;
emptyChildNumber--;
if (offset == operationOpTotal + numberOpTotal) {
cout << "Error, out of size" << endl;
return -1;
}
}
}
// 打印图中存储的内容
rootOp->print(tree->getRoot());
cout << "=" << rootOp->calculate(tree->getRoot()) << endl;
cout << endl;
delete[] gepSequence;
delete tree;
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
C语言实现随机生成数学表达式.zip
共5个文件
h:4个
cpp:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 17 浏览量
2022-01-06
12:01:24
上传
评论
收藏 5KB ZIP 举报
温馨提示
C语言实现随机生成数学表达式.zip
资源推荐
资源详情
资源评论
收起资源包目录
C语言实现随机生成数学表达式.zip (5个子文件)
Op-main
src
Op.h 5KB
main.cpp 3KB
GNode
Graph.h 3KB
Node.h 1KB
Tree.h 716B
共 5 条
- 1
资源评论
我慢慢地也过来了
- 粉丝: 6827
- 资源: 4007
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功