給出兩點,求這兩點在圖上的最短路徑
分別以最上,左下,右下為頂點,看這個三角圖形
ans=這三種情況下兩點的層數差
#include "stdio.h"
#include "string.h"
#include "math.h"
int main()
{
int n,m,sn,sm,rn,rm,ln,lm,ans;
while (scanf("%d%d",&n,&m)!=EOF)
{
sn=sqrt(n);
if (sn*sn!=n) sn++; // 以最上為定點所在的層數
sm=sqrt(m);
if (sm*sm!=m) sm++;
ln=(n-(sn-1)*(sn-1))/2+1+(sm-sn); // 以左下為頂點所在的層數
lm=(m-(sm-1)*(sm-1))/2+1;
rn=(sn*sn-n+1)/2+1+(sm-sn); // 以右下為頂點所在的層數
rm=(sm*sm-m+1)/2+1;
ans=fabs(sn-sm)+fabs(ln-lm)+fabs(rn-rm);
printf("%d\n",ans);
}
return 0;
}