bfs预处理出每个点s和t的距离d1和d2(无法到达标为inf),然后在若干灌木丛格子(x,y)里取min(d1[x][y]+d2[x][y])

/*
0:贝茜可以通过的空地
1:由于各种原因而不可通行的区域
2:贝茜现在所在的位置
3:骑士们的位置
4:长着贝茜需要的灌木的土地
*/
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int N=1005,inf=1e9,dx[]={-1,1,0,0},dy[]={0,0,-1,1};
int n,m,a[N][N],d1[N][N],d2[N][N],ans=inf;
bool v[N][N];
struct qwe
{
int x,y,p;
qwe(int X=0,int Y=0,int P=0)
{
x=X,y=Y,p=P;
}
}s,t;
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
bool ok(int x,int y)
{
return x>=1&&x<=n&&y>=1&&y<=m&&!v[x][y]&&a[x][y]!=1;
}
void bfs(qwe s)
{
queue<qwe>q;
memset(v,0,sizeof(v));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
d2[i][j]=inf;
v[s.x][s.y]=1;
d2[s.x][s.y]=0;
q.push(s);
while(!q.empty())
{
qwe u=q.front();
q.pop();
for(int i=0;i<4;i++)
if(ok(u.x+dx[i],u.y+dy[i]))
{
v[u.x+dx[i]][u.y+dy[i]]=1;
d2[u.x+dx[i]][u.y+dy[i]]=u.p+1;
q.push(qwe(u.x+dx[i],u.y+dy[i],u.p+1));
}
}
}
int main()
{
m=read(),n=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
a[i][j]=read();
if(a[i][j]==2)
s=qwe(i,j,0);
if(a[i][j]==3)
t=qwe(i,j,0),a[i][j]=1;
}
bfs(s);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
d1[i][j]=d2[i][j];
a[t.x][t.y]=3;
bfs(t);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j]==4)
ans=min(ans,d1[i][j]+d2[i][j]);
printf("%d\n",ans);
return 0;
}

最新文章

  1. SignalR SelfHost实时消息,集成到web中,实现服务器消息推送
  2. Eclipse部署Maven web项目到tomcat服务器时,没有将lib下的jar复制过去的解决办法
  3. 工作流引擎Oozie(一):workflow
  4. nodejs中全局变量
  5. Xcode里-ObjC, -all_load, -force_load
  6. imageserver
  7. Python3 - 时间处理与定时任务
  8. #include&lt;filename.h&gt; 与 #include“filename.h”
  9. 【Debian百科】巨页
  10. [模拟炉石](一)让游戏过程显示到cocos2d中
  11. NSInteger和BOOL的底层类型
  12. IE回车的怪异行为
  13. UVALive 6910 Cutting Tree(并查集应用)
  14. 浅谈Java的集合体系
  15. Scrum 冲刺 第六日
  16. Ubuntu 16.04 为 root 帐号开启 SSH 登录
  17. 12.Git分支-推送(push)、跟踪分支、拉取(pull)、删除远程分支
  18. Linux 手册惯用的节名
  19. svn提示文件 is already locked
  20. FFmpeg在JAVA中的使用以及Process.waitFor()引发的阻塞问题

热门文章

  1. 九度oj 题目1181:遍历链表
  2. uva1366/LA3530
  3. poj 3667 Hotel (线段树的合并操作)
  4. 【bzoj2527】[Poi2011]Meteors(树状数组(单点查询,区间修改)+整体二分)
  5. Django开发:(3.2)ORM:多表操作
  6. JAVA调用动态链接库(dll)
  7. Eclipse 搭建tomcat+动态项目完整版
  8. C# .NET 如何修改代码字体
  9. CSDN-markdown编辑器之从本机导入Markdown文件(二)
  10. Java总结之网络