给出两点,求这两点在图上的最短路径

分别以最上,左下,右下为顶点,看这个三角图形

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;
}
05-11 22:16