zoj 2081 BFS 延迟标记 读入问题
Time Limit: 2 Seconds Memory Limit: 65536 KB
Now a spy is besieged in a maze. He knows that there is a telegraph transmitter in the maze somewhere. So he must get there to use the telegraph transmitter to ask for help.

But the mission is very dangerous, because there are some mines in the map (see the figure above). When the spy steps on it, it will immediately explode and the mission will fail. The spy doesn't know where the mines are, thus he will use his best strategy to get to the destination (he will always go along the shortest path). There may be several shortest paths for the spy to choose, and the probability to choose each path from the start point to the destination is the same.
Now your task is to write a program to find the probability that the spy can get to the telegraph transmitter.
Input
The input file begins with an integer T, indicating the number of test cases. Each test case begins with two integers N, M, indicating the height and width of the maze. (N <= 10, M <= 10) In the following N lines, each line contains M characters describing the map. There is one blank line after each map. Spaces denotes empty square, '#' denotes a wall, 'S' denotes the spy, 'M' denotes a mine, and 'T' denotes the telegraph transmitter. It's guaranteed that the four sides of the map are all walls.
Output
For each maze, first output the number of the test case (`Mission #1:', ` Mission #2:', etc.) in a line of its own.
If it is possible for the spy to get to the telegraph transmitter, print a line containing the probability that the spy can get to the telegraph transmitter, exact to two digit to the right of the decimal point. Adhere to the output format shown in the sample below.
If the spy can't get to the destination, output a line containing the statement `Mission Impossible.'
Output a blank line after each test case.
Sample Input
2 6 10 ########## # M T # # ### # # ### # # S # ##########
6 10 ########## # M T # # ### # # ### # # S # ##########
Sample Output
Mission #1: The probability for the spy to get to the telegraph transmitter is 50.00%.
Mission #2: Mission Impossible.
Author: YE, Kai Source: ZOJ Monthly, February 2004
题意:间谍只走最短路,而这些路上可能埋有炸弹,请问间谍安全到达目的地的可能性多少。
题解:BFS记录最短路径个数以及这些路径中踩到炸弹的路径的个数,最后换算个百分比就行了。
注意需要延迟标记,还有图中有空格,读入不能用scanf。
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
#include<map> #define N 101
#define M 15
#define mod 1000000007
#define mod2 100000000
#define ll long long
#define maxi(a,b) (a)>(b)? (a) : (b)
#define mini(a,b) (a)<(b)? (a) : (b) using namespace std; int T;
char s[N][N];
int vis[N][N];
int cc,tot;
int n,m;
int dirx[]={,-,,};
int diry[]={,,,-}; typedef struct
{
int x;
int y;
int now;
int boom;
}PP; PP start,end; int ok(PP next)
{
if(next.x>= && next.x<n && next.y>= && next.y<m && vis[next.x][next.y]== && s[next.x][next.y]!='#'){
if(s[next.x][next.y]=='M')
next.boom=;
return next.boom;
}
return ;
} void BFS()
{
queue<PP> q;
q.push(start);
int first=-;
PP te,next;
int i;
int re;
while(q.size()!=)
{
te=q.front();
vis[te.x][te.y]=;
q.pop();
// printf(" %d %d\n",te.x,te.y);
for(i=;i<;i++){
next.x=te.x+dirx[i];
next.y=te.y+diry[i];
next.now=te.now+;
next.boom=te.boom;
re=ok(next);
next.boom=re;
if(re==) continue;
if(next.x==end.x && next.y==end.y)
{
// printf(" %d %d first=%d now=%d %d\n",next.x,next.y,first,next.now,next.boom);
if(first==-) first=next.now;
else{
if(next.now!=first) return;
}
tot++;
if(next.boom==) cc++;
}
else{
q.push(next);
}
}
}
} int main()
{
int i,j;
//freopen("data.in","r",stdin);
scanf("%d",&T);
getchar();
for(int cnt=;cnt<=T;cnt++)
//while(T--)
//while(scanf("%d%d",&n,&q)!=EOF)
{
//q.clear();
cc=tot=;
memset(vis,,sizeof(vis));
scanf("%d%d",&n,&m);
getchar();
for(i=;i<n;i++){
gets(s[i]);
}
for(i=;i<n;i++){
for(j=;j<m;j++){
if(s[i][j]=='S'){
start.x=i;
start.y=j;
start.boom=;
start.now=;
}
if(s[i][j]=='T'){
end.x=i;
end.y=j;
}
}
}
//printf("%d %d %d %d\n",start.x,start.y,end.x,end.y);
BFS();
printf("Mission #%d:\n",cnt);
if(cc==){
printf("Mission Impossible.\n");
}
else{
printf("The probability for the spy to get to the telegraph transmitter is %.2f%%.\n",(1.0)**cc/tot);
}
printf("\n"); } return ;
}
zoj 2081 BFS 延迟标记 读入问题的更多相关文章
- codevs 1082 线段树练习 3 区间更新+延迟标记
题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述 Input Description 第一行一个正整数n,接下 ...
- HDU5785 Interesting(Manacher + 延迟标记)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5785 Description Alice get a string S. She think ...
- FZU 2171(线段树的延迟标记)
题意:容易理解. 分析:时隔很久,再一次写了一道线段树的代码,之前线段树的题也做了不少,包括各种延迟标记,但是在组队分任务之后,我们队的线段树就交给了另外一个队友在搞, 然后我就一直没去碰线段树的题了 ...
- [HDOJ4578]Transformation(线段树,多延迟标记)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578 四种操作:查询.加法.乘法.改数.应该是需要维护三个lazy标记,然后就是套路了.查询是区间内所 ...
- 杭电 HDU ACM 1698 Just a Hook(线段树 区间更新 延迟标记)
欢迎"热爱编程"的高考少年--报考杭州电子科技大学计算机学院 Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memor ...
- [uva11992]Fast Matrix Operations(多延迟标记,二维线段树,区间更新)
题目链接:https://vjudge.net/problem/UVA-11992 题意:n*m的矩阵,每次对一个子矩阵操作,有三种操作:加x,设置为x,查询.查询返回子矩阵和.最小值.最大值 n很小 ...
- Tree(树链剖分+线段树延迟标记)
Tree http://poj.org/problem?id=3237 Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 12 ...
- 【左偏树+延迟标记+拓扑排序】BZOJ4003-城池攻占
[题目大意] 有n个城市构成一棵树,除1号城市外每个城市均有防御值h和战斗变化参量a和v. 现在有m个骑士各自来刷副本,每个其实有一个战斗力s和起始位置c.如果一个骑士的战斗力s大于当前城市的防御值h ...
- Codeforces Round #262 (Div. 2)C(二分答案,延迟标记)
这是最大化最小值的一类问题,这类问题通常用二分法枚举答案就行了. 二分答案时,先确定答案肯定在哪个区间内.然后二分判断,关键在于怎么判断每次枚举的这个答案行不行. 我是用a[i]数组表示初始时花的高度 ...
随机推荐
- iterator与iterable
用Iterator模式实现遍历集合Iterator模式是用于遍历集合类的标准访问方法.它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构.例如,如果没有使用Iterato ...
- 历史管理 onhashchange
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python基础一 day13 生成器
#生成器函数# def generator():# print(1)# return 'a'## ret = generator()# print(ret) #只要含有yield关键字的函数都是生成器 ...
- 产生式模型(生成式模型)与判别式模型<转载>
转自http://dongzipnf.blog.sohu.com/189983746.html 产生式模型与判别式模型 产生式模型(Generative Model)与判别式模型(Discrimiti ...
- AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排
一.前言 上一篇部署了一个最基础的helloworld应用,创建了两个容器和一个network,还算应付得过来. 如果该应用继续引入mysql.redis.job等若干服务,到时候发布一次得工作量之大 ...
- angular-file-upload 在IE下使用的坑
如果在控件配置里面设置了queueLimit属性为1,就是队列文件个数为1,并且在<input>标签设置里multiple属性. 在IE浏览器上传附件的时候,浏览器会报错“SCRIPT50 ...
- 洛谷P1001 A+B Problem
这道题…………还是很简单!!! code: #include <iostream> #include <cstdio> using namespace std; int mai ...
- [HIHO] 1050 树中的最长路
#1050 : 树中的最长路 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中, ...
- Linux下的Memcache安装及安装Memcache的PHP扩展安装
Linux下Memcache服务器端的安装服务器端主要是安装memcache服务器端,目前的最新版本是 memcached-1.3.0 .下载:http://www.danga.com/memcach ...
- python 有4个数字1234,能组成多少个互不相同且无重复的三位数数字。
def output(): count = 0 for i in range(1,5): for j in range(1, 5): for k in range(1, 5): if i==j or ...