博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1046 Gridland (找规律题)
阅读量:5769 次
发布时间:2019-06-18

本文共 888 字,大约阅读时间需要 2 分钟。

题意:
        将一个矩形划分成单位矩形。问从一个点出发,经过所有单位矩形的顶点1次后,回到起点的最短路径的长度是多少。
 
思路:
        用个专业点的说法,题目求的是哈密顿回路的最短长度。其实是数学推断题。首先可以得出的是,矩形的长宽是可以调转的,这并不影响最后结果。考虑一条S型的路线,从左上角的顶点出发,走一条S型的路线以最短距离走完最多的顶点,然后最后再尽量取最短路走完剩下的点。长为奇数与偶数时,最短路径的走法如图所示。
        由此推断,两种走法都是与宽的奇偶性无关的。第一种情况,路径长度就是长宽之积;第二种情况,走到最后一个格的长度是长宽之积-1,再加上最后一个格到终点的距离,sqrt(2)。对比两种情况的路径长度可知,当长宽为一奇一偶时,应按照第一种情况计算。
  1    2    3    4                       1    2    3    4    5
16    7    6    5                       24  25  14  13    6
15    8    9   10                      23  22  15  12    7
14   13   12   11                     20  21  16  11    8
                                            19  18  17  10    9
#include
#include
int main(){ int N; int n,m; int i=0; scanf("%d",&N); while(N--) { i++; scanf("%d %d",&n,&m); if(n%2==1&&m%2==1)printf("Scenario #%d:\n%.2lf\n\n",i,((double)n*m-1+sqrt(2.0))); else printf("Scenario #%d:\n%.2lf\n\n",i,(double)n*m); } return 0;}

**注意:

        sqrt(2)会判编译错误,正确写法为sqrt(2.0)。

转载于:https://www.cnblogs.com/XDJjy/archive/2013/04/06/3002972.html

你可能感兴趣的文章
多项式前k项和java_多项式朴素贝叶斯softmax改变
查看>>
java数组只能交换0下标和n_编程练习-只用0交换排序数组
查看>>
OracleLinux安装说明
查看>>
标准与扩展ACL 、 命名ACL 、 总结和答疑
查看>>
使用@media实现IE hack的方法
查看>>
oracle体系结构
查看>>
Microsoft Exchange Server 2010与Office 365混合部署升级到Exchange Server 2016混合部署汇总...
查看>>
Proxy服务器配置_Squid
查看>>
【SDN】Openflow协议中对LLDP算法的理解--如何判断非OF区域的存在
查看>>
纯DIV+CSS简单实现Tab选项卡左右切换效果
查看>>
redis 常用命令
查看>>
EdbMails Convert EDB to PST
查看>>
Centos7同时运行多个Tomcat
查看>>
使用CocoaPods过程中的几个问题
查看>>
我的友情链接
查看>>
为eclipse安装maven插件
查看>>
Spring boot 整合CXF webservice 全部被拦截的问题
查看>>
Pinpoint跨节点统计失败
查看>>
机房带宽暴涨问题分析及解决方法
查看>>
XP 安装ORACLE
查看>>