假设有一个类似于魔方的大正方体由n*n*n小块堆叠而成,使用图graph结构来存储。每小块为一个节点,值为0或1。现欲将正方体表面非0的节点抠掉,使得人眼所看到的小块值均为1。注意每抠掉一块,则人眼会看到新的表面。在新的表面继续将非0节点抠掉,直至人眼所见的小块的值均为1。有种情况可能会出现,即若沿某个方向一直抠下去全是0,即将立方体抠通了出现一个洞。请各位高手不吝赐教,给点思路也行。多谢。
解决方案 »
- 耗時長的存儲過程如何作進度條,假的也行,
- 有谁用过这样的控件MBevel\MLabel...
- delphi 执行SQL的Update出错
- 在delphi中如何成批地向数据库添加图片?
- 调试一个示例程序时出现如下问题:error creating object.
- 急用!求 对实数进行有精确位(如0.01)的“四舍五入”的函数!
- 怎样实现永远居上的窗口?类似 QQ 的窗口。
- 如何在LISTBOX或DBGRID控件中根据所选的行在该行显示按纽
- 添加的IE按钮如何和添加的工具条交互,比如按钮状态
- 关于TWebBrowser的问题,送分
- 用webbrowser登陆获取cookie,再用idhttp去get为什么还是登录之前的信息
- 求XE6 绿色版的下载地址,网上的好象都失效了
type
TArr = array[0..19,0..19,0..19] of Byte; // 数据模型 20*20*20
TArr1 = array[0..19,0..19] of Byte; // 合并纵向通透模型二、定义全局数组变量
var M:TArr; // 数据模型
M1:TArr; // 合并纵向通透三、初始化
说明:三维数组X(横)Y(坚)Z(纵),循环变量i,j,k,
procedure TForm1.Button1Click(Sender: TObject);
var i,j,k:integer;
begin
randomize;
for k:=0 to 19 do
for j:=0 to 19 do
for i:=0 to 19 do
M[i,j,k]:=random(2); // 0-1随机数。
end;四、搜索合并纵向通透
var T:boolean;
i,j,k,kk:integer;
begin
kk:=5; // 合并1-6层
for i:=0 to 19 do
for i:=0 to 19 do
begin
T:=True;
for k:=0 to kk do
if [k,i,j]=1 then T:=False;
if T then M1[i,j]:=0
else M1[i,j]:=1;
end;
end;五、显示图形
通过Memo字符图形,如果画图,自己写吧。
假设有一个类似于魔方的大正方体由n*n*n小块堆叠而成,使用图graph结构来存储。每小块为一个节点,值为0或1。现将该正方体完全浸入水中,水会将正方体表面非0的节点溶解掉,表面为1的保留下来。注意每溶解掉一块,则会出新的表面且接触到水,在新的表面继续将非0节点溶解,直至所有接触到水的小块的值均为1。有2种情况可能会出现,一是若沿某个方向一直溶解下去全是0,则立方体被打通出现一个洞;二是立方体有可能被溶解为多个断开不相连的物体。 程序结果返回剩余的所有表面为1的节点。
哥,感谢帮助,我觉得好像不是这个意思。节点溶解不单单是朝一个方向,而是朝3个坐标轴即上下前后左右6个方向(水从某一个方向溶进来后,就可以向剩余的5个方向继续溶解)。每当溶解掉内部一个节点,其周围的5个节点都接触了水,都有可能被溶解。有点类似于floodfill,或者遍历。另外,程序需要返回的是所有剩余的表面结点,貌似至少应该返回3维数组才能表示节点的坐标。非常感谢。