啥叫蛋疼……
为啥蛋疼……
我WA了一晚上,就因为……
其实到现在我也不知道因为啥……
之前一直错,在main开始run的时候,坐标录入我用的是
scanf("%1s%d%1s%d",&ch1,&sj,&ch2,&dj)
错的死去活来……
后来在小媛的指点下,改成
scanf("%c%d %c%d",&ch1,&sj,&ch2,&dj)
就过了,所以小媛你欠我一个解释……
代码在下面,传统bfs,老套路……
#include<stdio.h> #include<iostream> #include<string.h> #include<queue> using namespace std; struct node { int x,y; int time; }; int dir[8][2]={2,1, 2,-1, 1,2, 1,-2, -1,2, -1,-2, -2,1, -2,-1}; int fj(int a,int b) { if(a<1||b<1||a>8||b>8)return 0; else return 1; } int bfs(int si,int sj,int di,int dj) { int i,flag[9][9]; if(si==di&&sj==dj)return 0; queue<node> q; node cur,next; memset(flag,0,sizeof(flag)); cur.x=si; cur.y=sj; cur.time=0; flag[si][sj]=1; q.push(cur); while(!q.empty()) { cur=q.front(); q.pop(); for(i=0;i<8;i++) { next.x=cur.x+dir[i][0]; next.y=cur.y+dir[i][1]; if(!flag[next.x][next.y] && fj(next.x,next.y)) { flag[next.x][next.y]=1; next.time=cur.time+1; if(next.x==di && next.y==dj) return next.time; q.push(next); } } } return 0; } int main() { char ch1,ch2; int count,si,sj,di,dj; while(~scanf("%c%d %c%d",&ch1,&sj,&ch2,&dj)) { getchar(); si=ch1-'a'+1; di=ch2-'a'+1; count=bfs(si,sj,di,dj); printf("To get from %c%d to %c%d takes %d knight moves./n",ch1,sj,ch2,dj,count); } return 0; }