一个算法题

keystudio 2007-03-19 11:21:45
设有长宽高都为X的立方体一个 ,求 一个小虫在立方体 表面任意位置 爬遍所有立方体的面的最短路径

另谁能给讲讲UML 看了网上几遍文章 没看太懂...
...全文
543 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
Red_angelX 2007-03-20
  • 打赏
  • 举报
回复
顶一下
chinnel 2007-03-19
  • 打赏
  • 举报
回复
我的想法跟樓上一樣,並且正在實現.
不過覺得danjiewu(阿丹)的做法應該不是最短.
gwl1984 2007-03-19
  • 打赏
  • 举报
回复
把问题转化一下:把立方体展开成平面,然后画一条线,使得这条线通过所有的面和虫所在的点,且这条线最短.就像环球旅行一样.
danjiewu 2007-03-19
  • 打赏
  • 举报
回复
我猜是(sqrt(2)*2 + 1) * X + 小虫到任一个顶点的最短距离。
keystudio 2007-03-19
  • 打赏
  • 举报
回复
对算法题都没兴趣啊..........
fj4408 2007-03-19
  • 打赏
  • 举报
回复
顶下!
shoutor 2007-03-19
  • 打赏
  • 举报
回复
顶一下
keystudio 2007-03-19
  • 打赏
  • 举报
回复
顶~~~~~~~
chinnel 2007-03-19
  • 打赏
  • 举报
回复
winForm 下面可以立即試下:
private void Form1_Load(object sender, System.EventArgs e){
this.label1.Text = GetDistance(10,new Point(1,4),1).ToString();
//or this.label1.Text = GetDistance(30,new Point(5,14),1).ToString();
}
chinnel 2007-03-19
  • 打赏
  • 举报
回复
/// <summary>
/// 設邊長為bLength的立方體,求一個小蟲在立方體表面任意位置(Point),爬遍立方體所有面的最短路徑(Result).
/// </summary>
/// <param name="bLength">正方體的邊長</param>
/// <param name="p">Point position</param>
/// <param name="minLength">最小臨界位</param>
/// <returns>Result</returns>
public virtual double GetDistance(int bLength,Point p, int minLength)
{
if(bLength < 3)
{
return 0;
}
double middleNum = ((double)bLength)/2;
int pX = p.X;
int pY = p.Y;
int sideA = 0;
int sideB = 0;
int overPst = bLength - minLength;
double result = 0;

if(pX <= middleNum)
{
if(pY <= middleNum)
{
sideA = pY;
sideB = pX + overPst;

}
else
{
sideA = pX;
sideB = (bLength - pY) + overPst;
}
}
else
{
if(pY <= middleNum)
{
sideA = bLength - pX;
sideB = pY + overPst;
}
else
{
sideA = bLength - pY;
sideB = (bLength - pX) + overPst;
}
}

result = Math.Sqrt(sideA * sideA + sideB * sideB) + overPst*Math.Sqrt(2) + 2*(minLength*Math.Sqrt(2)) + minLength;
return result;
}
/*解釋,設小蟲所在的位置面為立方體的頂面,小蟲經由最近的邊 爬向離自己最近的(底面頂點跨面偏移宜一個臨界位);
* 經由底面,爬向最遠的一個頂點跨面偏移宜一個臨界位. 再加上最後一個面的臨界位.
* 如果忽略臨界位,那結果應該是 小蟲到最近顶点的距离 加 两个不可能在同一平面的顶点 之间的最短距离*/
honkerhero 2007-03-19
  • 打赏
  • 举报
回复
重在走,线要是连贯的吧
honkerhero 2007-03-19
  • 打赏
  • 举报
回复
展开是个什么形状,不规则形状,期待算法,帮顶
王集鹄 2007-03-19
  • 打赏
  • 举报
回复
如果
小强爬到边上是不是经过两个面?
小强爬到顶点上是不是经过三个面?

输出格式是啥?

有没有输入、输出范例?
shrinerain 2007-03-19
  • 打赏
  • 举报
回复
哦,对,不是1+Sqrt(2)...

我错了。。。
danjiewu 2007-03-19
  • 打赏
  • 举报
回复
确实是Sqrt(5)。
chinnel 2007-03-19
  • 打赏
  • 举报
回复
如果小蟲有最小單位呢?
比如小蟲的最小單位為1,那麼就是說它不可能站在一個 x=0,y=0,z=0 的頂點位置呢?
wzq6511 2007-03-19
  • 打赏
  • 举报
回复
应该到最近的顶点的距离加两个顶点之间的最短距离
keystudio 2007-03-19
  • 打赏
  • 举报
回复
顶~~~~~~~
keystudio 2007-03-19
  • 打赏
  • 举报
回复
我的思路跟楼上差不多 不过我觉得是不是 两个顶点和虫的位置 3个点连线最短的就可以了
一共8个顶点 4组对应顶点 分别连线比较?
不知道还有没有更短的

另外uml没人愿意说说吗
ruan_hg 2007-03-19
  • 打赏
  • 举报
回复
走到对顶点的距离并不是(1+Sqrt(2),而是Sqrt(5)!
高中立体几何中学过,确如gwl1984()所言,“ 把立方体展开成平面”
加载更多回复(2)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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