[luogu 1332] 血色先锋队 {广搜}

版权声明:~~~感谢支持! https://blog.csdn.net/qq_39897867/article/details/89602562

题目

https://www.luogu.org/problemnew/show/P1332


解题思路

就是一道很简单的广搜题。


代码

#include<cstdio> 
#include<queue>
#include<cstring>
#define rep(i,x,y) for(register int i=x;i<=y;++i)
using namespace std; 
int n,m,xa,xb,a[501][501],sa[4]={0,1,0,-1},sb[4]={1,0,-1,0}; 
queue<pair<int,int> >q; 
void bfs(){
	while (!q.empty()){
		int x=q.front().first,y=q.front().second; q.pop(); 
	    rep(i,0,3) 
		 if (a[x+sa[i]][y+sb[i]]==-1&&x+sa[i]<=n&&x+sa[i]>0&&y+sb[i]<=m&&y+sb[i]>0) 
		  a[x+sa[i]][y+sb[i]]=a[x][y]+1,q.push(make_pair(x+sa[i],y+sb[i])); 
	}
}
int main(){
	memset(a,-1,sizeof(a)); 
 	scanf("%d%d%d%d",&n,&m,&xa,&xb); 
 	int x,y; 
 	rep(i,1,xa) {
 		scanf("%d%d",&x,&y); a[x][y]=0; 
 		q.push(make_pair(x,y)); 
 	}
 	bfs(); 
	rep(i,1,xb){
		scanf("%d%d",&x,&y); 
		printf("%d\n",a[x][y]); 
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39897867/article/details/89602562