螺旋队列和hiho1525逃离迷宫3

我是真调不出错误了!

hiho1525逃离迷宫3

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//中间变量为长整形,so x,y变量一定要设置为长整型
long long cal(long long x,long long y)
{
    if (x<=y && y<=-x && x<=0)
        return (4*x*x-3*x+y)%26;
    else if (-y+1<=x && x<=y-1 && y>0)
        return (4*y*y-3*y+x)%26;
    else if (-x+1<=y && y<=x && x>0)
        return (4*x*x-x-y)%26;
    else if (y+1<=x && x<=-y && y<0)
        return (4*y*y-y-x)%26;
}

int main()
{
    long n,i,k;
    long long dx[4]={-1,0,0,1},dy[4]={0,-1,1,0};
    long long x,y,e,s[4];
    scanf("%ld",&n);
    for (k=1;k<=n;k++)
    {
        scanf("%lld%lld",&x,&y);
        //任意两个字母必存在相邻的两个位置
        //(0,0)[a]->( , )[a]->( , )[b]->(x,y)[b],三步必能实现
        //所以寻找一步、两步(小于三步)的操作

        //a=b:一步
        //a<>b:大于一步
        //(0,0)[a]->( , )[a]->(x,y)[b] 相邻
        //(0,0)[a]->( , )[b]->(x,y)[b] 相邻
        //寻找一步上下左右操作,(0,0)能否到达字母为b的格
        //寻找一步上下左右操作,(x,y)能否到达字母为a的格

        if (x==0 && y==0)
        {
            printf("0\n");
            continue;
        }
        e=cal(x,y);
        for (i=0;i<3;i++)
            s[i]=cal(x+dx[i],y+dy[i]);

        if ((x==0 && y==1) || (x==0 && y==-1) || (x==1 && y==0) || (x==-1 && y==0))
            printf("1\n");
        else if (e==0)
            printf("1\n");
        else if ((x==0 && y==2) || (x==0 && y==-2) || (x==-2 && y==0) || (x==2 && y==0))
            printf("2\n");
        else if ((x==1 && y==1) || (x==1 && y==-1) || (x==-1 && y==1) || (x==-1 && y==-1))
            printf("2\n");
        //(0,0)->相邻[B D F H]->(x,y)
        else if (e==1 || e==3 || e==5 || e==7)
            printf("2\n");
        //(x,y)->相邻[0]->(0,0)
        else if (s[0]==0 || s[1]==0 || s[2]==0 || s[3]==0)
            printf("2\n");
        else
            printf("3\n");
    }
    return 0;
}
时间: 2024-10-29 03:53:07

螺旋队列和hiho1525逃离迷宫3的相关文章

hdu 1728 逃离迷宫 (bfs+循环队列)

逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15248    Accepted Submission(s): 3681 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地

(hdu step 4.2.7)逃离迷宫(在有转弯次数的限制的情况下,判断一个点是否能到另一个点)

题目: 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 264 Accepted Submission(s): 85   Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍

HDU 1728 逃离迷宫

这道题做的我想哭啊..WA了将近十次了吧 一开始我用数组模拟的队列,后来和老大代码对拍,感觉改的是基本都一模一样了,还是WA 实在没有办法了,改用queue了 题目里的x是列y是行,和代码里的反过来的,要注意! 题目里面说在起点的时候无论朝哪个方向走都不算一次转弯,所以我们将方向和转弯次数都赋值为-1,这样就不用特殊处理了 入队条件,拓展后的转弯次数小于或等于vis数组中记录的最小转弯次数即可入队 输出结果,不要一搜到终点便急着输出,应为可能后面再一次搜到终点的时候转弯次数小于k 因此可以遍历完

HDU 1728 逃离迷宫(BFS)

Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,gloria不能走到迷宫外面去.令人头痛的是,gloria是个没什么方向感的人,因此,她在行走过程中,不能转太多弯了,否则她会晕倒的.我们假定给定的两个位置都是空地,初始时,gloria所面向的方向未定,她可

螺旋队列顺时针方向 和逆时针方向的实现

这个博主找规律的部分写得很好,原样放在下面.最后给出了顺时针和逆时针方向的螺旋队列的实现,可以看出它们的差别如此之小. 和螺旋队列类似,也是找规律的zigzag数组见这个帖子. 螺旋队列的样子如下图: 两大规律: 1.螺旋规律 2.奇数(圈数,或X轴正坐标)平方规律(紫线) 问题描述: 设1的坐标是(0,0),x方向向右为正,y方向向下为正,例如,7的坐标为(-1,-1),2的坐标为(1,0).编程实现输入任意一点坐标(x,y),输出所对应的数字! 问题解决: 从紫线突破. 从图中不难发现,每圈

螺旋队列问题

1 #include<iostream> 2 #include<iomanip> 3 using namespace std; 4 #define max(a,b) ((a)>(b) ? (a) : (b)) 5 #define abs(a) ((a)>0 ? (a) : (-a)) 6 int foo(int x, int y) 7 { 8 int t = max(abs(x),abs(y)); 9 int v; 10 int u = 2 * t -1; 11 u =

HDU 1728 逃离迷宫(DFS||BFS)

逃离迷宫 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,gloria不能走到迷宫外面去.令人头痛的是,gloria是个没什么方向感的人,因此,她在行走过程中,不能转太多弯了,否则她会晕倒的.我们假定给定的两个位置都是空地,初始时,gloria所面向的方向

逃离迷宫(HDU 1728 BFS)

逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 21384    Accepted Submission(s): 5180 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方

hdu 1728 逃离迷宫 (BFS)

逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14376    Accepted Submission(s): 3458 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方