这个题居然要用到三维坐标,太神奇了~
这个代码其实我也是借鉴网上牛人写的,感觉写的非常好,略作修改之后就拿过来了;
至于那个坐标公式,还有一小部分没有弄懂,下次可以继续研究下呵;
每个点都可以用三向坐标来表示
最短路径=两点各坐标差的绝对值之和决定的。用三向坐标
表示后,你会发现最短路径总是穿过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;
}