1. 程式人生 > >螺旋隊列和hiho1525逃離迷宮3

螺旋隊列和hiho1525逃離迷宮3

不出 實現 整型 hiho i++ 技術分享 code 出錯 n)

技術分享

技術分享

技術分享

技術分享

我是真調不出錯誤了!

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; }

螺旋隊列和hiho1525逃離迷宮3