[RQNOJ]PID34 / 紧急援救

描述

话说2007年8月5日,Mike博士神秘失踪了,最后发现是被外星人绑架了,幸好外星人目前还是在地球上活动,并且知道外星人不了解地球,幸好,Milk博士身上有无线信号发送装置,我们终于确定了他的位置,必须赶快到那里去救他。

根据无线信号发送装置,我们确定出一张地图,为了尽快寻找到Mike博士,于是这个光荣和艰巨的任务便交给了你,编写程序,通过使用一张地图帮助研究所确定从研究所出发找到Mike博士最短距离。

数据范围: n<=1000

格式

INPUT FORMAT:

第一行为n

第二行为n*n的地图(其中0表示通路,1表示死路)

最后两行每行有两个数字,分别表示研究所的坐标和博士信号所在的位置。

OUTPUT FORMAT:

        一个数字k,表示从研究所出发找到Milk博士的最短距离。


SAMPLE INPUT

10
0100110100
0001110010
1000000001
1000100011
0000101100
1000001100
1001010011
0000010100
0101010000
1001000001
1 7
10 2


SAMPLE OUTPUT

14


HINTS

#include<bits/stdc++.h>
using namespace std;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
char ma[1001][1001];
int x1,y11,x2,y2,n;
struct akgfhk{
	int x,y,step;
}que[1000001];
void bfs(int xx,int yy){
	int head=0,tail=1,x,y,newx,newy;
	que[tail].x=xx;
	que[tail].y=yy;
	ma[xx][yy]='1';
	que[tail].step=0;
	while(head<tail){
	head++;
	x=que[head].x;
	y=que[head].y;
	for(int i=0;i<4;i++){
		newx=x+dx[i];
		newy=y+dy[i];
		if(newx>0&&newx<=n&&newy>0&&newy<n&&ma[newx][newy]=='0'){
			tail++;
			que[tail].x=newx;
			que[tail].y=newy;
			que[tail].step=que[head].step+1;
			ma[newx][newy]='1';
			if(newx==x2&&newy==y2){
				cout<<que[tail].step<<endl;
				return ;
			}
		}
	}
	}
}
int main(){


	cin>>n;
	for(int i=1;i<=n;i++)cin>>ma[i];
	cin>>x1>>y11;
	cin>>x2>>y2;
	y11--;
	y2--;
	bfs(x1,y11);
	return 0;
}


题解:此题爆搜会超时,所以只能用队列宽搜来实现,说白了就是宽搜的模板题,也可以用spfa或迪杰斯特拉算法,宽度优先搜索建立在队列思想上。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值