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]数组表示初始时花的高度 ...
随机推荐
- UVA - 1252 Twenty Questions (状压dp)
状压dp,用s表示已经询问过的特征,a表示W具有的特征. 当满足条件的物体只有一个的时候就不用再猜测了.对于满足条件的物体个数可以预处理出来 转移的时候应该枚举询问的k,因为实际上要猜的物品是不确定的 ...
- Codeforces Round #316 (Div. 2) B Simple Game 贪心
贪心,如果m分成的两个区间长度不相等,那么选长的那个区间最接近m的位置,否则选m-1位置,特判一下n等于1的情况 #include<bits/stdc++.h> using namespa ...
- 历史管理 onhashchange
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 看结果,测试?java中的String类 字符串拆分成字符串数组 判定邮箱地址 字符串比较 参数传递?
看结果1? package com.swift; class ArrayString { public static void main(String[] args) { String str = & ...
- JavaScript调试技巧之console.log()详解--2015-08-07
对于JavaScript程序的调试,相比于alert(),使用console.log()是一种更好的方式,原因在于:alert()函数会阻断 JavaScript程序的执行,从而造成副作用:而cons ...
- http常用状态吗以及分别代表什么意思?
http常用状态码: 状态码 定义 说明 1xx 信息 街道请求继续处理 2xx 成功 成功的收到.理解.接受 3xx 重定向 浏览器需要执行某些特殊处理一完成请求 4xx 客户端错误 请求的语法有问 ...
- Java输入几行字符串
查找书籍 给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价. 输入格式: 输入第一行给出正整数n(<10),随后给出n本书的信息.每本书在一行中给出书名,即 ...
- perl 对ENV环境变量的使用
1.hash 方式访问. %ENV key为环境变量名,value为环境变量值 2.调用ENV模块 . use Env qw(PATH); print "path is $ENV{path ...
- day03变量补充和数据类型
1.变量的内存管理机制 引用计数:存放值的内存地址绑定的变量个数 垃圾:引用计数为0的内存地址 引用计数增加: age = 18 x = age 引用计数减少: ①age = 19 ②del x 值的 ...
- IRQ中断处理流程
基于Linux2.6.30.4分析IRQ中断的处理流程. 1.中断入口 /* arch/arm/kenel/entry-armv.S*/ b vector_irq + stubs_offset 2.v ...