這個題居然要用到三維坐標,太神奇了~
這個代碼其實我也是借鑒網上牛人寫的,感覺寫的非常好,略作修改之后就拿過來了;
至于那個坐標公式,還有一小部分沒有弄懂,下次可以繼續研究下呵;
每個點都可以用三向坐標來表示
最短路徑=兩點各坐標差的絕對值之和決定的。用三向坐標
表示后,你會發現最短路徑總是穿過3種線段,步數=各線段和=坐標差之和.有時侯把圖轉過幾個角度或把元素分分類或掠取幾條線都可能有新發現。

以上轉自:
http://hi.baidu.com/sunshine_0316/blog/item/834b3f39b58f3622b9998f6f.html
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;

int main()


{
int n1,n2;
int i,alevel,aright,aleft,blevel,bright,bleft,steps;

scanf("%d%d",&n1,&n2);
alevel=1;
blevel=1;
for(i=1;;i=i+2)

{
if(n1-i<=0)

{
aright=(i-n1)/2+1;
aleft=(n1+1)/2;
break;
}
alevel++;
n1=n1-i;
}
for(i=1;;i=i+2)

{
if(n2-i<=0)

{
bright=(i-n2)/2+1;
bleft=(n2+1)/2;
break;
}
blevel++;
n2=n2-i;
}
steps=abs(alevel-blevel)+abs(aleft-bleft)+abs(aright-bright);
printf("%d\n",steps);

return 0;
}