三角迷宫

Description:

如图为一个三角迷宫,迷宫中的数字从1开始标号。现给出两个数字m、n,请求出从m到n的最短路径,输出路径长度。

注:如图所示,迷宫中的数字被网格线所分隔,我们规定,穿过一次网格线,路径长度加一,初始路径长度为0。

 

 

Input:

第一行,一个整数T(0≤T≤106)。

接下来T行,每行两个整数,m、n(1≤m,n≤1e9​)。

Output:

输出T行,每行一个整数,表示结果。

Sample Input:

1

6 12

Sample Output:

3

从三个角度看这个图,level,left,right,如下图,题目的答案就是3个图上2个点之间的层数的高度差之和。

 

#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
    int m,n,cm,cn,rm,rn,lm,ln;    //c表示level图 ,r表示right图,l表示left图
    while(scanf("%d%d",&m,&n)!=EOF)//
    {
        cm=(int)ceil(sqrt(m));//ceil为向上取整函数“math.h”
        cn=(int)ceil(sqrt(n));
        rm=(m-(cm-1)*(cm-1)-1)/2+1;  //确定m在right图中的哪一层
        rn=(n-(cn-1)*(cn-1)-1)/2+1;    //确定n在right图中的哪一层
        lm=(cm*cm-m)/2+1;          //确定m在left图中的哪一层
        ln=(cn*cn-n)/2+1;            //确定n在left图中的哪一层
        int cnt=(int)(fabs(cm-cn)+fabs(lm-ln)+fabs(rm-rn));
        printf("%d\n",cnt);
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作者写点废话哈: 1、先是看到手机上有个小游戏,填字游戏,横竖相连,像个迷宫 2、就用Delphi 做了个由 panel 数组 组成的迷宫,墙都是方块,丑死了。 3、再查查网上有不少迷宫样式,其中有的迷宫是单墙的,而且任意两处都是想通的。 4、再做了个四面墙都可打通的迷宫,甚至做了个斜线通道的。 5、觉得三角迷宫更有挑战性,另外想试试以前学的数据结构指针、链表、树、连通图的知识是不是忘光了, 就做了个三角迷宫,而且索性做成一个完善的 Delphi 控件,而且有不少属性。。。 6、有几个要解释下:1)迷宫是个连通图,每个正三角形与三个倒三角形相连,每个倒三角形与三个正三角形相连; 2)采用递归,从一个节点开始构造整个连通图;3)查找、遍历连通图时用外部二维数组标识来防止重复; 3)构造迷宫采用的是所谓 随机prim 算法;4)迷宫的宽与三角形边长、列数相互制约,迷宫的高由三角形的高 (正三角形的高通过边长计算的)与行数决定;5)使用指针时最容易丢掉 ^ 这个符号,例如某节点是 Pmm 指针型, 对其属性的引用就不能用 Pmm.Value 而必须用 Pmm^.Value ,机器编译时不会提示错误,但运行时老是出错! 6)绘图通过计算三角形的顶点坐标来构造;7)控件父类是 TGraphicControl ,试了好几种最后它最好, 要覆盖 paint 方法绘图;8)构造类时如 FGridWidth 的内部数据与属性 GridWidth 不要混淆使用, 记住 内部数据赋值,属性引用,属性(Published)是给运行期或者设计面板上别人使用的,内部数据是封装的; 9)发布自定义控件前先准备一个包含 类 一样名称的 ICO 的 DCR 文件,好像只有 Delphi7 里的 Image Editor 可以制作,这个工具包括两个文件 ImageEdit.exe 和 ImageD32.dll 两个文件 7、好像前后陆续花了近两个星期吧,终于基本完善了。该学点其他东西了 -- by chenxz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值