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 }