一个算法题
设有长宽高都为X的立方体一个   ,求   一个小虫在立方体   表面任意位置   爬遍所有立方体的面的最短路径      
 另谁能给讲讲UML   看了网上几遍文章   没看太懂...
------解决方案--------------------(1+Sqrt(2))*X   
 因为一个顶点是属于三个面,一个正方体是6个面,所以我们只需要到达两个相对的顶点即可走完所有面。   
 假设我们从一个顶点出发,对角线到达另一个顶点,再走一条边到达与出发点相对的那个顶点,就可以了。   
 所以路程就是Sqrt(2)*X+X
------解决方案--------------------走到对顶点的距离并不是(1+Sqrt(2),而是Sqrt(5)! 
 高中立体几何中学过,确如gwl1984()所言,“ 把立方体展开成平面”
------解决方案--------------------应该到最近的顶点的距离加两个顶点之间的最短距离
------解决方案--------------------///  <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; 
 		} 
 		/*解釋,設小蟲所在的位置面為立方體的頂面,小蟲經由最近的邊 爬向離自己最近的(底面頂點跨面偏移宜一個臨界位); 
 		 * 經由底面,爬向最遠的一個頂點跨面偏移宜一個臨界位. 再加上最後一個面的臨界位. 
 		 * 如果忽略臨界位,那結果應該是 小蟲到最近顶点的距离 加 两个不可能在同一平面的顶点 之间的最短距离*/