四色方柱问题求助!

MuFox 2005-04-23 11:17:23
设有4个立方体,每个六方体的每一面用红,黄,蓝,绿4种颜色之一染成。和们要把之4个立方体叠成一个方形柱体,使得柱体的4个侧面的每一侧均有4种不同的颜色。试设计一个回溯算法,计算出4个立方体的一种满足要求的叠置方案。
请各位大侠帮帮忙,写个算法出来!!
...全文
695 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuelong_zl 2005-04-26
  • 打赏
  • 举报
回复
这次成功

灌水不少

大家如果认为有什么不对请说出来一起讨论

xuelong_zl 2005-04-26
  • 打赏
  • 举报
回复
呵呵我也灌点水吧

事实上我感觉这个题如果用逆推想会好理解一些

现在设你已将这四个立方体组合成了一个方形柱体那你可以可以将它的侧面展开这样会形成一个4*4的方阵

上面说的应该可以理解吧

4*4方阵上每行的四个值相当于原小立方体的四个侧面的着色

列上的四个值就是表示四个小立方体合成方形柱体后柱体上某个侧面的着色了

这样就可以利用类似于N皇后的回溯算法的思路了

N皇后的要求是不能相互攻击

而这个题根据要求就是使每列上的着色值都不同

例如

数组第一行可任意写入数据我用1234代表不同的着色

1234//第一行
2341//第二行保证了列方向上没有相同的着色
2412//同上
4123//同上

这就是一个了

不知道自己说没说明白!!
Leaveye 2005-04-26
  • 打赏
  • 举报
回复
回溯时,甚至不用独立的数组,只需要四个储存i的空间就够了。
Leaveye 2005-04-26
  • 打赏
  • 举报
回复
根据立方体展开图,并编号如下:
  ⑹
 ⑷⑸
⑵⑶

则使数组与立方体建立映射。数组中保存⑴⑵⑶⑷⑸⑹⑴⑵⑶⑷⑸。
再将1固定为底面,2固定为正面,则数组与某确定位置的立方体建立映射。得到四个侧面的映射为2356。
之后,可以由输入的4x6数组作回溯。即可得到方案。
具体回溯算法的伪码大概是这样的(假定四个立方体已经完成输入):
⒈ 将第一个方块直接读入栈(每个栈单元是一个方块的数组);
⒉ 将下一个方块作为当前方块;
⒊ 令 i = 1;
⒋ 对当前方块,将第 i 个面开始的 6 个面作为一个方块入栈;
⒌ 若栈内所有方块的第 2、3、5、6 面没有相同的颜色,则跳转到8;
⒍ 出栈,并将 i 增一;
⒎ 若 i > 6 ,则为没有方案,返回失败;否则跳转到4;
⒏ 若当前方块是第四个方块,则做找到一个方案的处理;否则跳转到2;
⒐ 结束。
就这样。
fct0906 2005-04-25
  • 打赏
  • 举报
回复
这个问题关键就是用一种方法求出当一个立方体按照一个特定朝向摆好之后, 其它各个面对应于所要摆的柱体的哪个面的问题, 知道这种对应关系以后, 就可以得到各个面的颜色了, 然后进行回溯算法.
注意: 需要两个约束才能确定一个立方体的朝向.
MuFox 2005-04-25
  • 打赏
  • 举报
回复
。。。唉,没人9我!
lonenomad 2005-04-25
  • 打赏
  • 举报
回复
去掉的面,和顺逆时针。
mostideal 2005-04-25
  • 打赏
  • 举报
回复
mark
MuFox 2005-04-25
  • 打赏
  • 举报
回复
to:lonenomad(流浪汉)
需要哪两个约束条件?

various 2005-04-25
  • 打赏
  • 举报
回复
感觉题目有些不大清楚
pongba 2005-04-25
  • 打赏
  • 举报
回复
开玩笑吧老哥:-)用程序证明这个有意义吗?数学证明如下(初中证明):

条件:
PA+PB>=AB (三角形两边之和大于第三边)
AB=AC (等边三角形)
AC>=PC (大角对大边)
结论:
PA+PB >= PC (对于三角形内(含边界)上的点恒成立)
lonenomad 2005-04-25
  • 打赏
  • 举报
回复
装入时有两种情况,可以是顺时针,‘东南西北’,也可以是逆时针,‘东北西南’,这实际上是一个面朝上朝下的问题。
lonenomad 2005-04-25
  • 打赏
  • 举报
回复
首先、设有六个面,分别为东西、南北、上下。作三选一。有三种情况。将选后的结果放入一个数组(大小为4。比如选去,‘上下’,则剩余就是‘东南西北’,顺时针。面向你的这面为东。
第一层不动,第二层依上法选出、三四层同理选出。
然后开始转动。每层可转三次
找出符合条件的输出就可以了。
用穷偈法就可以了。不是很难,两个循环就可以了。
zhangfjj 2005-04-24
  • 打赏
  • 举报
回复
to joshion(紫晶) ( ) 信誉:100 2005-04-24 01:53:00 得分: 0


谁能帮我设计这个程序啊 ????(我真的很菜  帮帮我吧)
   证明:一个等边三角形ABC,任意取一点P,都使得PB+PC>=PA.
==========
对呀,程序最多只能穷举,在等边三角形ABC中不存在这样一点,使得pb+pc<pa
如果是要任找一点p,使得PB+PC>=PA. 那倒还有可能!
icansaymyabc 2005-04-24
  • 打赏
  • 举报
回复
TO joshion(紫晶) : 你问的是一个数学问题,用数学来证明的。
用程序怎么能证明啊?
MuFox 2005-04-24
  • 打赏
  • 举报
回复
染色方案由人定,就是不管别人怎么染,输入之后,你输出符合要求的一组叠置方案就是了!
只见烟火飞扬 2005-04-24
  • 打赏
  • 举报
回复
是不是要求总共有多少种方案啊?不然的话,每个侧面,先随便选1色涂 立方体1,再在剩下的3色里选1色涂立方体2,剩下里选1色涂立方体3..,这样就可以输出了。应该没有什么别的要求了吧,随意选色时可以用随机函数rand()实现
MuFox 2005-04-24
  • 打赏
  • 举报
回复
如果每个立方体都涂一种颜色,那不用旋转了,随便叠一起就行了~

如果是随意给立方体染色呢?怎么才能输出符合要求的一组叠置方案!
joshion 2005-04-24
  • 打赏
  • 举报
回复
谁能帮我设计这个程序啊 ????(我真的很菜  帮帮我吧)
   证明:一个等边三角形ABC,任意取一点P,都使得PB+PC>=PA.


帮我设计一下呀 !各位高手,不要看题目简单就不要回复
可以加我QQ63158556   然后回复我  谢谢了
只见烟火飞扬 2005-04-24
  • 打赏
  • 举报
回复
“四个立方体每一面都要染色,然后叠在一起,所得方柱的侧面都要有四种不同的颜色!”

题目是这样的吗?这样的话不是很简单:假设4个立方体都涂的一样,叠在一起,然后从上至下,
依次将4个立方体旋转0度,90度,180度,270度,就是每侧都4色的,每立方体也是4色的
加载更多回复(6)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧