关于排版最优算法,回帖又分

bt_lose 2009-03-11 03:43:56
问题是这样的:
有N个矩形需要画在固定大小的纸上(A4)(210*297),矩形的大小不完全一致,纸有足够多,要求所画的矩形不能相交,长宽可以倒置,也就是说原来的长可以变成新矩形的宽,宽可以变成长,矩形之间的间距也固定,求要将这N个矩形画到纸上,最少需要多少张纸,并且需要计算出,每一个矩形在哪一张纸的什么位置。

假设现在有矩形
1.150*190
2.150*190
3.50*150
4.111*200
5.40*80
6.180*90
注:单位均为毫米(mm)

数据可以自己假设。假设A4纸,左上角坐标为(0,0)。
计算的结果可以须说明 150*190 这个矩形在第几张纸的那个坐标,比如在第三张,(50,100),可以表示为(3,50,100)

如果有不明白的,可以加我qq:393438363,或者打电话给我:13572134344
...全文
368 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
doudouduan 2009-03-23
  • 打赏
  • 举报
回复
帮顶。。
lvjaio5241 2009-03-22
  • 打赏
  • 举报
回复
关注中
cangzhubai 2009-03-22
  • 打赏
  • 举报
回复
帮顶。。
Pajack 2009-03-22
  • 打赏
  • 举报
回复
帮顶。。
wuyi8808 2009-03-22
  • 打赏
  • 举报
回复
up
bt_lose 2009-03-17
  • 打赏
  • 举报
回复
我想出了一个办法,不知道怎么样,请大家帮我看看。
我们按照从左到右,从上到下的顺进行排放,尽可能填充宽;当然也可以从上到下,从左到右,尽可能填充左边的长。
1.就是先根据面积的大小,对待排的矩形进行排序。
2.然后按照这个顺序进行排版,放下当前没有排的面积最大的一个,排了后,将当前纸张分为右和下两个部分。
3.然后按照 2,继续排列,直到左边部分放不下未排矩形的任何一个,就往下排,如果往下排,继续重复2-3,放不下后换新的一页。

排序算法略。。

p为起始点坐标,Space为矩形之间彼此间距
private void PaiLie(int width, int height, Point p)
{
if (width <= 0 || height <= 0)
return;
//查找出面积最大的可以放入 width, height之中的矩形 l
if (l == null)
return;
l.Location = p;
//向右
PaiLie(width - l.Width - Space, l.Height, new Point(p.X + l.Width + Space, p.Y));
//向下
PaiLie(width, height - l.Height - Space, new Point(p.X, p.Y + l.Height + Space));
//换页
PaiLie(width, height - l.Height - Space, new Point(0, 0));
}
h13826013646 2009-03-12
  • 打赏
  • 举报
回复
帮忙顶啊 顺便学习了
AFIC 2009-03-12
  • 打赏
  • 举报
回复
排版可不是随便把一些方块仍上去就可以了,
通常要重要信息放在显著位置之类的,程序肯定无法实现。
lvjaio5241 2009-03-11
  • 打赏
  • 举报
回复
up
qq675927952 2009-03-11
  • 打赏
  • 举报
回复
不懂,友情up
  • 打赏
  • 举报
回复
类似的问题论坛上已经问过多次了:
http://topic.csdn.net/u/20090218/19/11eda71c-ed9a-497a-a908-29fd93aed1bd.html
http://topic.csdn.net/u/20081228/14/538d2309-4db7-4d66-b985-2ba644aab799.html
http://topic.csdn.net/u/20090222/23/d3e977b6-4ca4-4879-9b3f-f63f182104e3.html

这本身就是个NP难的问题,只能用一些近似算法才比较现实。
建议lz还是去查一下关于这方面的论文~
  • 打赏
  • 举报
回复
类似的问题论坛上已经问过多次了:
http://topic.csdn.net/u/20090218/19/11eda71c-ed9a-497a-a908-29fd93aed1bd.html
http://topic.csdn.net/u/20081228/14/538d2309-4db7-4d66-b985-2ba644aab799.html
http://topic.csdn.net/u/20090222/23/d3e977b6-4ca4-4879-9b3f-f63f182104e3.html

这本身就是个NP难的问题,只能用一些近似算法才比较现实。
建议lz还是去查一下关于这方面的论文~
bt_lose 2009-03-11
  • 打赏
  • 举报
回复
楼上能否说的详细点。。。
test4ever 2009-03-11
  • 打赏
  • 举报
回复
这样的问题有很多啊,关于剪裁的,

使用启发式函数来达成近似最优是可行的
绿色夹克衫 2009-03-11
  • 打赏
  • 举报
回复
又是这类的问题,如果数据量不大的话,可以用穷举来做,数据量大的话,求最优解很难!
IF404 2009-03-11
  • 打赏
  • 举报
回复
虽然还没想到什么好的
但还是顶下
bt_lose 2009-03-11
  • 打赏
  • 举报
回复
不要求以任何代码实现,谈谈想法即可
willianyy 2009-03-11
  • 打赏
  • 举报
回复
关注中
ilovew521527 2009-03-11
  • 打赏
  • 举报
回复
哎,第一次看到这样的
hyz_cs 2009-03-11
  • 打赏
  • 举报
回复
我有办法QQ谈...122722629

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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