『一本通』广搜的优化技巧
Posted qq8260573
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了『一本通』广搜的优化技巧相关的知识,希望对你有一定的参考价值。
Knight Moves
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int dx[9]={2,2,1,1,-1,-1,-2,-2},dy[9]={-1,1,-2,2,-2,2,-1,1}; 4 int n,L,step[305][305]; 5 struct node{int x,y;}b,e; 6 queue<node>q; 7 bool check(int x,int y) {return x>=0&&x<L&&y>=0&&y<L;} 8 9 void BFS() { 10 while(!q.empty()) q.pop(); 11 memset(step,0x7f,sizeof(step)); 12 q.push(b),step[b.x][b.y]=0; 13 while(step[e.x][e.y]>1e3) { 14 int X=q.front().x,Y=q.front().y; q.pop(); 15 for(int i=0;i<8;i++) { 16 int nx=X+dx[i],ny=Y+dy[i]; 17 if(!check(nx,ny)||step[nx][ny]<1e3) continue; 18 step[nx][ny]=step[X][Y]+1; 19 q.push((node){nx,ny}); 20 } 21 } 22 printf("%d ",step[e.x][e.y]); 23 } 24 25 int main() { 26 scanf("%d",&n); 27 while(n--) { 28 scanf("%d%d%d%d%d",&L,&b.x,&b.y,&e.x,&e.y); 29 if(b.x==e.x&&b.y==e.y) puts("0"); 30 else BFS(); //Breadth-First Search(广度优先搜索) 31 } 32 }
以上是关于『一本通』广搜的优化技巧的主要内容,如果未能解决你的问题,请参考以下文章