博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
E - The Blocks Problem ( UVA - 101)
阅读量:4611 次
发布时间:2019-06-09

本文共 1417 字,大约阅读时间需要 4 分钟。

- 题目大意

     先理解给出的四个移动方式:

  1. move a onto b:把木块a、b上的木块放回各自的原位,再把a放到b上;
  1. move a over b:把a上的木块放回各自的原位,再把a发到含b的堆上;

  2. pile a onto b:把b上的木块放回各自的原位,再把a连同a上的木块移到b上;

  3. pile a over b:把a连同a上木块移到含b的堆上。

 然后根据条件来移动即可。

- 解题思路

    如果把每个情况都写出来肯定很麻烦,所以首先先找出他们的共同点然后来写出算法,这样就会简单很多,如

  1. 找到某木块
  2. 将某木块上的木块放回原位
  3. 将某木块及其上面木块移动到另一个木块上

- 代码

    

#include
#include
#include
using namespace std; int n; vector
num[24]; void find(int a, int & i, int &j ) { for (i = 0; i < n; i++) for (j = 0; j< num[i].size(); j++) if (num[i][j] == a) return; } void over(int j, int h) { for (int i = h + 1; i < num[j].size(); i++) { int b = num[j][i]; num[b].push_back(b); } num[j].resize(h + 1); } void renew(int p, int h, int g ) { for (int i = h; i < num[p].size(); i++) num[g].push_back(num[p][i]); num[p].resize(h); } int main() { int a, b; cin >> n; string s1, s2; for (int i = 0; i < n; i++) num[i].push_back(i); while (cin >> s1) { if (s1 == "quit") { for (int i = 0; i < n; i++) { cout << i<<":"; for (int j = 0; j < num[i].size(); j++) cout <<" "<
> a >> s2 >> b; int q, w, e, r; find(a, q, e); find(b, w, r); if (q == w) continue; if (s2 == "onto") over(w, r); if (s1 == "move") over(q, e); renew(q, e, w); } system("pause"); return 0; }

  

转载于:https://www.cnblogs.com/alpacadh/p/8438509.html

你可能感兴趣的文章
搜索算法----二分查找
查看>>
Python语言编程
查看>>
事务并发、事务隔离级别 .
查看>>
[poj 1469]Courses
查看>>
Xcode8出现AQDefaultDevice(173):Skipping input stram 0 0 0x0
查看>>
数据结构(二十四)二叉树的链式存储结构(二叉链表)
查看>>
LeetCode刷题笔记(2)HashMap相关应用
查看>>
Material Design Lite,简洁惊艳的前端工具箱 之 布局组件。
查看>>
关于bootstrap Modal弹窗 滚动条的问题
查看>>
Django----------路由控制
查看>>
将数字转化为字符串的快捷方式
查看>>
JAVA 序列化 与 反序列化
查看>>
java23种设计模式
查看>>
冲刺周期一--站立会议04
查看>>
支持IE6以上阴影效果纯CSS
查看>>
优化算法与特征缩放
查看>>
NOIP模板复习(4)区间操作之莫队算法,树状数组,线段树
查看>>
git warning: LF will be replaced by CRLF in 解决办法
查看>>
浅谈MVP设计模式
查看>>
深入理解PHP中的引用和赋值
查看>>