(1649)ZOJ
来源:互联网 发布:交易师软件 编辑:程序博客网 时间:2024/06/17 07:04
#include<iostream>
#include<cstdio>
#include<string.h>
#include<string>
#include<stack>
#include<set>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
#define ll __int64
#define lll unsigned long long
#define MAX 1000009
#define eps 1e-8
#define INF 0xfffffff
#define mod 1000000007
using namespace std;
/*
题意:
想法:BFS,这里有特殊处理。当到达x,y点时的时间小于之前算出的时间就会更新,这样可以保证最小时间。
*/
int dir[4][2] = {-1,0,0,1,1,0,0,-1};
struct point
{
int x;
int y;
int time;
int step;
};
queue<point>Q;
int N,M;
char ma[1009][1009];
int mintime[1009][1009];//到达x,y点的最小时间
int sx,sy,dx,dy;
int BFS(point x)
{
Q.push(x);
point hd;
while(!Q.empty())
{
hd = Q.front();
Q.pop();
for(int i = 0;i<4;i++)
{
int xx = hd.x + dir[i][0];
int yy = hd.y + dir[i][1];
if(xx<0||xx>=N||yy<0||yy>=M) continue;
if(ma[xx][yy]!='#')
{
point t;
t.x = xx;
t.y = yy;
t.step = hd.step + 1;
t.time = hd.time + 1;
if(ma[xx][yy] == 'x')//如果遇到警察就时间加一
t.time++;
if(t.time < mintime[xx][yy])//如果新运算出的时间更小,就更新
{
mintime[xx][yy] = t.time;
Q.push(t);
}
}
}
}
return mintime[dx][dy];//返回到达dx,dy的时间
}
int main()
{
while(~scanf("%d%d",&N,&M))
{
for(int i = 0;i<N;i++)
scanf("%s",ma[i]);
for(int i = 0;i<N;i++)
{
for(int j = 0;j<M;j++)
{
mintime[i][j] = INF;
if(ma[i][j] == 'r')
{
sx = i;
sy = j;
}
if(ma[i][j] == 'a')
{
dx = i;
dy = j;
}
}
}
point start;
start.x = sx;
start.y = sy;
start.step = 0;
start.time = 0;
mintime[sx][sy] = 0;
int ans = BFS(start);
if(ans<INF)
{
printf("%d\n",ans);
}
else
puts("Poor ANGEL has to stay in the prison all his life.");
}
return 0;
}
#include<cstdio>
#include<string.h>
#include<string>
#include<stack>
#include<set>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
#define ll __int64
#define lll unsigned long long
#define MAX 1000009
#define eps 1e-8
#define INF 0xfffffff
#define mod 1000000007
using namespace std;
/*
题意:
想法:BFS,这里有特殊处理。当到达x,y点时的时间小于之前算出的时间就会更新,这样可以保证最小时间。
*/
int dir[4][2] = {-1,0,0,1,1,0,0,-1};
struct point
{
int x;
int y;
int time;
int step;
};
queue<point>Q;
int N,M;
char ma[1009][1009];
int mintime[1009][1009];//到达x,y点的最小时间
int sx,sy,dx,dy;
int BFS(point x)
{
Q.push(x);
point hd;
while(!Q.empty())
{
hd = Q.front();
Q.pop();
for(int i = 0;i<4;i++)
{
int xx = hd.x + dir[i][0];
int yy = hd.y + dir[i][1];
if(xx<0||xx>=N||yy<0||yy>=M) continue;
if(ma[xx][yy]!='#')
{
point t;
t.x = xx;
t.y = yy;
t.step = hd.step + 1;
t.time = hd.time + 1;
if(ma[xx][yy] == 'x')//如果遇到警察就时间加一
t.time++;
if(t.time < mintime[xx][yy])//如果新运算出的时间更小,就更新
{
mintime[xx][yy] = t.time;
Q.push(t);
}
}
}
}
return mintime[dx][dy];//返回到达dx,dy的时间
}
int main()
{
while(~scanf("%d%d",&N,&M))
{
for(int i = 0;i<N;i++)
scanf("%s",ma[i]);
for(int i = 0;i<N;i++)
{
for(int j = 0;j<M;j++)
{
mintime[i][j] = INF;
if(ma[i][j] == 'r')
{
sx = i;
sy = j;
}
if(ma[i][j] == 'a')
{
dx = i;
dy = j;
}
}
}
point start;
start.x = sx;
start.y = sy;
start.step = 0;
start.time = 0;
mintime[sx][sy] = 0;
int ans = BFS(start);
if(ans<INF)
{
printf("%d\n",ans);
}
else
puts("Poor ANGEL has to stay in the prison all his life.");
}
return 0;
}
0 0
- zoj 1649
- zoj 1649
- zoj --1649
- (1649)ZOJ
- ZOJ 1649
- ZOJ-1649
- zoj 1649
- zoj 1649 Rescue
- ZOJ 1649 Rescue
- zoj 1649 Rescue
- ZOJ 1649 Rescue (BFS)
- ZOJ-1649 rescure
- zoj 1649 rescue (bfs)
- zoj 1649 BFS
- ZOJ-1649-Rescue
- ZOJ 1649 BFS
- ZOJ 1649 Resuce (BFS)
- zoj 1649 Rescue
- 3-17
- Hive体系结构介绍
- Android 之使用LocalBroadcastManager解决BroadcastReceiver安全问题
- css3 来实现图片在指定容器内等比例缩放,并控制中上下左右居中
- Android学习笔记--布局
- (1649)ZOJ
- 一次性拖鞋_一次性浴服_志龙洗浴用品厂
- Oracle's Business Intelligence Applications Configuration Manager 基本概念
- C64x EDMA Architecture
- 消灭星星的数组高效率算法(c++代码,控制台程序)
- sed命令
- 数据中心可视化的一些思考
- Java GC:垃圾回收器种类
- [Leetcode]Valid Number