有n×m个村庄规律地构成了n×m的矩形,每个村庄和它四面八方的村庄都存在一条道路,水平或垂直方向相邻村庄间的距离为1米,请问,从任意一个村庄出发,访问所有的村庄后回到出发点,至少需要走多远的路?
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double s;
int x,y;
cin>>x>>y;
if (x==1 && y==1)
{
s = 0;
}
else if (x == 1||y==1)
{
if (x==1)
{
s = (y-1)*2;
}
else
{
s = (x-1)*2;
}
}
else if (x%2==0 ||y%2==9)
{
s = x*y;
}
else
{
s = x*y+0.41;
}
// printf("%.2f",s);
cout<<fixed<<setprecision(2)<<s;
}
题意为经过所有点最后回到出发点。
做这个题的时候其实是无从下手的,无从下手,那么就找规律。
经过多种可能性的分析得出关系式与可能性之间有四种情况:
1.当只有一行或者一列的时候,若只有一行则路程为(列数-1)乘2,若只有一列则路程为(行数-1)乘2.
2.当只有一个节点的时候,路程为1.
3.当行数为偶数或者列数为偶数时,刚好可以一步接着一步不用斜着走。路程为行数乘以列数。
4.当列数与行数都为奇数时,则一步接着一步直到最后一步要斜着走。即行数与列数之积-0.41.因为最后一步由1改为了1.41
所以最后加0.41
最后输出时保留两位小数
通过下面这种方式(注意添加头文件):
#include<iomanip>
cout<<fixed<<setprecision(2)<<s;