给出一个n,m分别代表有n行,m列。问最短路径从第一个点出发走过所有的点(每个点只走一次)再回到出发点。
刚开始以为直接用n*m就可以,其实不对,要考虑n,m的奇偶状况。特殊的情况就是同为奇数的时候
红线部分就是同为奇数时的走法,可以看出是n*m-1+sqrt(2);
.#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
int T,casenum=1;
scanf("%d",&T);
while(T--)
{
int m,n;
scanf("%d %d",&m,&n);
printf("Scenario #%d:\n",casenum++);
double ans=0;
if(m<=2||n<=2)
ans=m*n*1.0;
if(m>2&&n>2)
{
if(m%2&&n%2)
{
ans=m*n*1.0+0.41;
}
else
ans=m*n*1.0;
}
printf("%.2lf\n",ans);
printf("\n");
}
return 0;
}