基本BFS,好像一个月没写题了。。。
写完这题继续看linux源码去。一定要坚持
1 #include2 #include 3 #include 4 using namespace std; 5 int N; 6 int num[102][102]; 7 queue Q; 8 int start_x,start_y,end_x,end_y; 9 int x_dire[]={-2,-2,-1,-1,1,1,2,2}; 10 int y_dire[]={-1,1,-2,2,-2,2,-1,1}; 11 bool legal_pos(int x,int y) 12 { 13 if(x>=1&&x<=N&&y>=1&&y<=N) 14 return true; 15 return false; 16 } 17 int calac() 18 { 19 while(!Q.empty()){ 20 int x,y; 21 x=Q.front(); 22 Q.pop(); 23 y=Q.front(); 24 Q.pop(); 25 if(x==end_x&&y==end_y){ 26 return num[x][y]; 27 } 28 int i; 29 for(i=0;i<8;i++){ 30 if(num[x+x_dire[i]][y+y_dire[i]]==-1&&legal_pos(x+x_dire[i],y+y_dire[i])){ 31 Q.push(x+x_dire[i]); 32 Q.push(y+y_dire[i]); 33 num[x+x_dire[i]][y+y_dire[i]]=num[x][y]+1; 34 } 35 } 36 } 37 return -1; 38 } 39 40 41 42 int main() 43 { 44 while(scanf("%d",&N)!=EOF){ 45 int i,j; 46 for(i=1;i<=N;i++) 47 for(j=1;j<=N;j++){ 48 num[i][j]=-1; 49 } 50 scanf("%d%d%d%d",&start_x,&start_y,&end_x,&end_y); 51 while(!Q.empty()) 52 Q.pop(); 53 Q.push(start_x); 54 Q.push(start_y); 55 num[start_x][start_y]=0; 56 printf("%d\n",calac()); 57 } 58 }