请教一个算法:(50分)

  • 主题发起人 主题发起人 yxylwt
  • 开始时间 开始时间
Y

yxylwt

Unregistered / Unconfirmed
GUEST, unregistred user!
有一定面积的材料,现在要把它分割成N个不相同的不规则的小图形,怎样的算法可以实现在输入各个小
图形的外形,大小,个数,以及角度后,浪费的材料最少???
 
使用深度优先算法!
 
该算法很难。
 
在确定了“小图形的外形,大小,个数,以及角度”后,使用深度优先算法并不难!
 
深度优先搜索的基本算法如下:

一. 递归算法:
递归过程为:
procedure DFS_TRY(i);
For r:=1 to maxr do
If 子结点MR 符合条件 THEN
产生的子结点MR压入栈;
IF 子结点 MR是目标结点 THEN 输出
ELSE DFS_RY(I+1);
栈顶元素出栈(删去MR);
endif;
enddo;
{*********************main***************************}
program DFS;
初始状态入栈;
DFS_TRY(i);


二. 非递归算法
program DFS(dep);{UNRECIRETION}
dep:=0;
repeat
dep:=dep+1;
j:=j+1;
if mr 符合条件then
产生子结点mr并将其记录
if 子结点是目标 then 输出并出栈
else p:=true;
else
if j>maxj then 回溯 else p:=false;
endif;
until p=true;
until dep=0;


其中回溯过程如下:
procedure backtracking;
dep:=dep-1;
if dep>0 then 取回栈顶元素
else p:=true;


不同问题的深度优先搜索算法是一样的,但在具体处理方法上,编程技巧上,不尽相同。
 
多人接受答案了。
 
后退
顶部