1330 【例8.3】最少步数

#include<bits/stdc++.h>
using namespace std;
int ax, ay, bx, by;
struct node{           
    int x, y, step;
};
node que[10010];        
int f, r;                
bool book[105][105];    
int fx[12][2]={{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-2,-2},{-2,2},{2,2},{2,-2}};
void bfs(int x, int y){
    f=r=1;   
    memset(book,0,sizeof(book));                            
    que[r].x=x, que[r].y=y, que[r].step=0, book[x][y]=1;        
    while(f<=r){
        node t;                     
        t.x=que[f].x;
        t.y=que[f].y;
        t.step=que[f].step;
        if(t.x==1 && t.y==1){        
            cout<<t.step<<endl;
            break;
        }
        for(int i=0; i<12; i++){    
            int nx=t.x+fx[i][0];
            int ny=t.y+fx[i][1];
            if(nx>=1 && nx<=100 && ny>=1 && ny<=100 && book[nx][ny]==0){   
                book[nx][ny]=1;
                r++;                
                que[r].x=nx;
                que[r].y=ny;
                que[r].step=t.step+1;
            }
        }
        f++;           
    }
}
int main()
{
    cin>>ax>>ay>>bx>>by;
    bfs(ax, ay);
    bfs(bx, by);
    return 0;
 }
原文地址:https://www.cnblogs.com/qwn34/p/13772132.html