螺旋队列和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; }