资源简介
有一座金字塔,金字塔的每块石头上都镶有对应的钻石,,不同的钻石有着不同的价值。现在从金字塔的顶端向金字塔的底端收集钻石,并且尽可能收集价值高的钻石,但是只能从一块砖斜向左下或斜向右下走到另一块砖上找到一个收集最高价值钻石的路线,并且告知可能收集的最大价值。
压缩包中含有代码.cpp,文档,可执行文件exe

代码片段和文件信息
#include
#include
#include
#include
using namespace std;
typedef struct brick {
int key; //该位置砖石的价值
int seleted; //是否被更上一级选择
int sum; //从该点向下的最大价值
}brick;
void Output_ini(int N brick**a) //输出最初的金字塔
{
for (int i =0; i <= N-1; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0) {
for (int k = 0; k < N - i - 1; k++)
cout << setw(4) << “ “; //用setw设置输出宽度
}
cout << setw(4) << a[i][j].key;
cout << setw(4) << “ “;
}
cout << endl;
}
cout << endl;
}
void clear(int N brick**a) //将无用的selected置为零
{
for (int i = 1; i <= N - 1; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0 && a[i - 1][j].seleted == 0)
a[i][j].seleted = 0;
else if (j == i && a[i - 1][j - 1].seleted == 0)
a[i][j].seleted = 0;
else if (j != 0 && j != i && a[i - 1][j].seleted == 0 && a[i - 1][j - 1].seleted == 0)
a[i][j].seleted = 0;
else if (j != 0 && j != i && a[i - 1][j].seleted == 0 && a[i - 1][j - 1].seleted != 0 &&
a[i][j].sum != a[i - 1][j - 1].sum - a[i - 1][j - 1].key)
a[i][j].seleted = 0;
else if (j != 0 && j != i && a[i - 1][j - 1].seleted == 0 && a[i - 1][j].seleted != 0 &&
a[i][j].sum != a[i - 1][j].sum - a[i - 1][j].key)
a[i][j].seleted = 0;
}
}
}
void Output_selected(int N brick**a) //输出selected金字塔以便检查
{
for (int i = 0; i <= N - 1; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0) {
for (int k = 0; k < N - i - 1; k++)
cout << setw(4) << “ “;
}
cout << setw(4) << a[i][j].seleted ;
cout << setw(4) << “ “;
}
cout << endl;
}
cout << endl;
}
void Max(int N brick**a) //得到最优路径,标记selected
{
for (int i = N-1; i >= 0; i--) { //自下而上
for (int j = 0; j <= i; j++) {
if (i == N-1) {
a[i][j].sum = a[i][j].key;
}
else if (a[i + 1][j].key > a[i + 1][j + 1].key) { // 左下大于右下
a[i][j].sum = a[i][j].key + a[i + 1][j].sum;
a[i + 1][j].seleted = 1;
}
else if (a[i + 1][j].key < a[i + 1][j + 1].key) { //右下大于左下
a[i][j].sum = a[i][j].key + a[i + 1][j + 1].sum;
a[i + 1][j + 1].seleted = 1;
}
else if(a[i + 1][j].key = a[i + 1][j + 1].key){ //相等
a[i][j].sum = a[i][j].key + a[i + 1][j].sum;
a[i + 1][j].seleted = 1;
a[i + 1][j + 1].seleted = 1;
}
}
}
a[0][0].seleted = 1;
}
void Output_result(int N brick**a) //将最优路径输出,可以得到多条路径
{
for (int i = 0; i < N; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0) {
for (int k = 0; k < N - i - 1; k++)
cout << setw(4) << “ “;
}
if (i == 0 && j == 0)
cout << setw(4) << a[0][0].key;
else if (a[i][j].seleted == 1) {
cout << setw(4) << a[i][j].key;
cout << setw(4) << “ “;
}
else if (a[i][j].seleted != 1) {
cout << setw(4) << “ “;
cout << setw(4) << “ “;
}
}
cout << endl;
}
}
int main()
{
cout << “请输入金字塔的层数:“ << endl;
int n choice=0;
cin >> n;
brick** a;
a = new brick*[n];
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1859460 2018-06-08 17:30 钻石金字塔.exe
文件 4151 2018-06-06 00:52 钻石金字塔.cpp
文件 217088 2019-04-06 12:45 钻石金字塔.docx
----------- --------- ---------- ----- ----
2080699 3
相关资源
- VisualStudioUninstaller vs卸载工具
- 组态王驱动开发包3.0.0.7(中文)
- 多窗口后台鼠标连点器
- 使用选择性重传协议实现UDP可靠通信
- VC 获得文件属性 获取文件的创建时
- 读者写者问题(读者优先,写者优先
- 用VC 编写的仿QQ聊天室程序源代码
- 外点法程序
- 外罚函数程序
- qt-电子点菜系统
- 推箱子及人工智能寻路C 源代码
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- MUSIC算法c 实现
- C 餐厅叫号系统(QT平)
- 国际象棋c 完整版
-
ob
jectARX给Auto CAD加工具条 - 画图程序MFC/VC/VC CRectTracker 串行化
- MFC网络编程实例
- c 课程设计 职工信息管理系统
- VC 游戏编程—附源代码
- IpHlpApi.h&IpHlpApi.lib
- 清华大学 c 郑莉 ppt课件
- c 程序判断离散数学中命题公式
- 多项式求和(数据结构C 版)
- vc 6.0开发的流程图编辑器
- VC 天空盒(skyBox)实现(附源代码)
- c MFC 画多边形
- 用C 实现的对网络上的ARP数据包进行
- Microsoft基本类库 (MFC)(C 库)
评论
共有 条评论