給出兩點,求這兩點在圖上的最短路徑
分別以最上,左下,右下為頂點,看這個三角圖形
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; }