给出两点编号,求如图所示的图中两点间欧氏距离*10取整
递归处理由编号求出坐标
#include<cstdio> #include<cmath> int T,n,s,t; void get(int n,int p,int&x,int&y){ if(!n){ x=y=0; return; } int D=1<<n*2-2,L=1<<n-1; int w=p/D; get(n-1,p&(D-1),x,y); if(w==0){ int x0=x,y0=y; x=y0,y=x0; }else if(w==1){ x+=L; }else if(w==2){ x+=L; y+=L; }else{ int x0=x,y0=y; x=L-1-y0; y=L*2-1-x0; } } int main(){ for(scanf("%d",&T);T;--T){ scanf("%d%d%d",&n,&s,&t); int x1,y1,x2,y2; get(n,s-1,x1,y1); get(n,t-1,x2,y2); printf("%d ",(int)round(hypot(x1-x2,y1-y2)*10)); } return 0; }