1330:【例8.3】最少步数

最少步数

这个和 细胞 不同,不需要对一整块进行标记,而是给每一个点确定一个最短路径(仅数值

 1 #include<iostream>
 2 #include<cstring>
 3 #include<queue>
 4 using namespace std;
 5 const int N=100;
 6 
 7 int r,c,a[N+5][N+5],t[]={-2,-2,-1,1,2,2,2,2,1,-1,-2,-2,
 8 -1,-2,-2,-2,-2,-1,1,2,2,2,2,1};
 9 queue<int> q;
10 void bfs(){
11     while(!q.empty()){
12         int x=q.front();
13         q.pop();
14         int y=q.front();
15         q.pop();
16         for(int i=0;i<12;i++){
17             int ni=x+t[i],nj=y+t[i+12];
18             if(ni>0&&ni<=N&&nj>0&&nj<=N&&(a[ni][nj]>a[x][y]+1||!a[ni][nj])){
19                 q.push(ni),q.push(nj);
20                 a[ni][nj]=a[x][y]+1;
21             }    
22         }
23     }
24 }
25 int main(){
26     int n=2,x,y;
27     while(n--){
28         cin>>x>>y;
29         memset(a,0,sizeof(a));
30         q.push(x),q.push(y);
31         bfs();
32         cout<<a[1][1]<<endl;
33     }
34     return 0;
35 }

 

posted @ 2021-08-13 11:29  Rekord  阅读(730)  评论(0编辑  收藏  举报