05-枚举分析.pptVIP

  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文档。上传文档
查看更多
熄灯问题——main() int cases, i, r, c; scanf(%d, cases); for ( r = 0; r 6; r++ ) press[r][0] = press[r][7] = 0; for ( c = 1; r 7; r++ ) press[0][c] = 0; for ( i = 0; i cases; i++ ) { for ( r = 1; r 6; r++ ) for ( c = 1; c 7; c++ ) scanf(%d, puzzle[r][c]); enumate(); printf(PUZZLE #%d\n, i+1); for ( r = 1; r 6; r++ ) { for ( c = 1; c 7; c++ ) printf(%d ,press[r][c]); printf(\n); } } 讨厌的青蛙 问题描述 在韩国,有一种小的青蛙。每到晚上,这种青蛙会跳越稻田,从而踩踏稻子。农民在早上看到被踩踏的稻子,希望找到造成最大损害的那只青蛙经过的路径。每只青蛙总是沿着一条直线跳越稻田,而且每次跳跃的距离都相同。 稻田里的稻子组成一个栅格,每棵稻子位于一个格点上。而青蛙总是从稻田的一侧跳进稻田,然后沿着某条直线穿越稻田,从另一侧跳出去。 讨厌的青蛙 问题描述 青蛙的每一跳都恰好踩在一棵水稻上,将这棵水稻踩倒。可能会有多只青蛙从稻田穿越,有些水稻被多只青蛙踩踏,如图8-7 所示。当然,农民所见到的是图8-8 中的情形,看不到图8-7 中的直线。 根据图8-8,农民能够构造出青蛙穿越稻田时的行走路径,并且只关心那些在穿越稻田时至少踩踏了3 棵水稻的青蛙。因此,每条青蛙行走路径上至少包括3 棵被踩踏的水稻。 而在一条青蛙行走路径的直线上,也可能会有些被踩踏的水稻不属于该行走路径。 讨厌的青蛙 问题描述 在图8-8 中,格点(2, 1)、(6, 1)上的水稻可能是同一只青蛙踩踏的,但这条线上只有两棵被踩踏的水稻,因此不能作为一条青蛙行走路径; 格点(2, 3)、(3, 4)、(6, 7)在同一条直线上,但它们的间距不等,因此不能作为一条青蛙行走路径; 格点(2, 1)、(2, 3)、(2, 5)、(2, 7)是一条青蛙行走路径,该路径不包括格点(2, 6)。 请你写一个程序,确定在所有的青蛙行路径中,踩踏水稻棵数最多的路径上有多少棵水稻被踩踏。例如,图8-8 的答案是7,因为第6 行上全部水稻恰好构成一条青蛙行走路径。 讨厌的青蛙 输入样例 输出样例 6 7 14 2 1 6 6 4 2 2 5 2 6 2 7 3 4 6 1 6 2 2 3 6 3 6 4 6 5 6 7 7 输入数据 从标准输入设备上读入数据。第一行上两个整数R、C,分别表示稻田中水稻的行数和列数,1≤R、C≤5000。第二行是一个整数N,表示被踩踏的水稻数量, 3≤N≤5000。在剩下的N 行中,每行有两个整数,分别是一颗被踩踏水稻的行号(1~R)和列号(1~C),两个整数用一个空格隔开。而且,每棵被踩踏水稻只被列出一次。 输出要求 从标准输出设备上输出一个整数。如果在稻田中存在青蛙行走路径,则输出包含最多水稻的青蛙行走路径中的水稻数量,否则输出0。 讨厌的青蛙 目的:帮助农民找到为害最大的青蛙。也就是要找到一条穿越稻田的青蛙路径,这个路径上被踩踏的水稻不少于其他任何青蛙路径上被踩踏的水稻数。当然,整个稻田中也可能根本就不存在青蛙路径。 问题的关键是:找到穿越稻田的全部青蛙路径。任何一条穿越稻田的青蛙路径 L,至少包括 3 棵被踩踏的水稻。 假设其中前两棵被踩踏的水稻分别是(X1, Y1)、(X2, Y2),那么: 令 dx=X2-X1、dy=Y2-Y1;X0=X1-dx、Y0=Y1- dy;X3=X2 + dx、Y3=Y2 + dy (X0, Y0)位于稻田之外,青蛙从该位置经一跳后进入稻田、踩踏位置(X1, Y1)上的水稻 (X3, Y3)位于稻田之内,该位置是 L 上第 3 棵被青蛙踩踏的水稻 Xi=X0 + i*dx、Yi=Y0+ i*dy(i3),如果 (Xi, Yi) 位于稻田之内,则(Xi, Yi)上的水稻必被青蛙踩踏。 讨厌的青蛙 struct PLANT {//描述一棵被踩踏的水稻 int x; //水稻的行号 int y; //水稻的列号 } 从被踩踏的水稻中选择两棵(X1, Y1)、(X2, Y2)。判断它们是否能够作为一条青蛙路径上最先被踩踏的两颗水稻。 (X1

文档评论(0)

5500082 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档