码迷,mamicode.com
首页 > 其他好文 > 详细

『一本通』广搜的优化技巧

时间:2019-01-31 00:15:11      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:puts   i++   for   adt   str   eof   its   arch   style   

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\n",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 }

 

『一本通』广搜的优化技巧

标签:puts   i++   for   adt   str   eof   its   arch   style   

原文地址:https://www.cnblogs.com/qq8260573/p/10340152.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!