求图形面积分析和总结.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

【题1】求图形面积

具有不同颜色的n个矩形被叠放在一张白纸上,纸的尺寸为a*b。摆放矩形时,必须使矩形的边与纸的边平行,并且每个矩形整个放在纸的边界之内。因此不同颜色的各种不同图形可在纸上出现。同一颜色的两个区域中如果至少有一个公共点,则可以认为它们是同一图形的一部份;否则认为是不同图形。题目要求计算每一图形的面积。

输入:

a,b,n (a,b为正偶数且a,b≤30,1?n?

矩形1左下角坐标 矩形1右上角坐标 颜色码1

?????????????????

矩形n左下角坐标 矩形n右上角坐标 颜色码n

a*b)

2

注:坐标系的定义为纸的中心,两轴分别平行于纸的两边。颜色码为1~64间的一个正整数。输出:

按颜色码升序要求输出每个彩色图形的面积。一行为一个彩色图形。格式:颜色码 图形面积

分析:

1、图形定义

纸中央作坐标原点,过原点作平行于纸两边的y轴和x轴。Y轴的坐标区间为??

b??b?,x轴的坐标

?区间为??

?

?

a??a?(如下图)

2 2??

?? 2 2??

纸上的每一坐标位置看作是一个可涂64种颜色的色点,其面积为单位1。这样a*b的纸即成了一个具有a*b个色点的点阵,纸的面积与色点数相等。设

squa—染色矩阵,其中squa[i,j]为(i,j)的色码(-?b?≤i≤?b?,-?a?≤j≤?a?,1≤squa[i,j]

≤?a*b?)

??2??

??2??

??2??

??2??

?? 2 ??

colorhave—颜色标志表,其中colorhave[j]为颜色j存在的标志(1≤j≤?a*b?);

?? 2 ??

我们输入数据的同时构造squa矩阵和colorhave表:

fillchar(squa,sizeof(squa),1);

fori←1tondo {依次读入每个矩形的信息}

begin

forj←1to5do读n; {读入矩形i的信息}

j

colorhave[n]←true; {置颜色n存在}

5 5

forj←nton-1do {矩形i涂上颜色n}

1 3 5

fork←nton-1dosqua[j,k]←n;

2 4 5

end;{for}

squa矩阵中的每一坐标点(x,y)有8个可能的相邻点,位于不同方向。(如上图(b))中圆圈内的数字表

征这8个方向。括号(△y,△x)为方向i的相邻点(y’,x’)与(y,x)的垂直增量和水平增量(1≤i≤8)

i i

2、图形面积的计算方法

按颜色码递增顺序搜索每一种颜色。每搜索一种颜色i(1≤i≤64)时,若colorhave表中存在该颜色,则按顺序搜索squa矩阵中的每一个元素;若发现一个具的颜色i的色点(y,x)时,则该坐标送入队列,并将该位置的色码置0,避免重复搜索。然后队首状态出队扩展,将所有色码为i的相邻坐标送入队列。这样按“先进先出”的顺序扩展下去,直至open=closed为止。此时得出(y.x)所在的一个彩色图形,其面积为(y,x)周围同颜色的色点数,即扩展的状态数open。显然,通过一次广度优先搜索,可得出一个彩色图形:

①状态和队列的定义

我们将当前块位置(y,x)作为状态,其相邻方向作为算符。状态和队列的定义如下:

Type

node=record

x,y:shortint; {坐标}

end;

var list:array[1‥listmax]ofnode; {队列}

open,closed:integer; {队尾指针和队首指针}list队列设两个指针:

open——队尾指针。每入队一个状态,open+1;closed——队首指针。每出队一个状态,closed+1。然后扩展出队状态list[closed],其生成的子状

态从队尾一端进入list表;

②搜索范围

将方向数k作为算符,搜索8个相邻块的颜色。显然方向数k的范围为1≤k≤8;

③约束条件

若(y,x)k方向的相邻块同色,则相邻块作为扩展出的子状态入队;

若squa矩阵中有p个涂有颜色i的图形,通过p次广度优先搜索便可计算出这些图形的面积。按照颜色码升序要求类推所有种颜色,可以得出每个彩色图形的面积。

3、程序流程

①扩展队首状态list[closed]

设当前扩展list[closed],该状态对应坐标的颜色为c

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地境外
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档