2015轻院校赛 B 迷宫 (bfs)
http://acm.zznu.edu.cn/problem.php?id=1967
这套题的有毒 我交了好多遍才对
坑:机关要按照顺序走 并且在走这个机关之前不能走这个机关 但是能穿过这个机关 所以不能把机关刚开始设成墙
要设成其他符号
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cmath> using namespace std;
#define memset(a,b) memset(a,b,sizeof(a))
#define N 110 struct node
{
int x,y,step;
}e[N]; char maps[N][N];
int n,m;
int dis[][]={{,},{-,},{,},{,-},{-,-},{,},{-,},{,-}};
int vis[N][N]; int IF(int x,int y,int nx,int ny,int k)
{
if(maps[x][y]=='*' || maps[x][y]=='#' || x< || x>=n || y< || y>=m || vis[x][y]==)
return ;
if(k>=)
{
if(k==)
{
if(maps[x][y+]=='#'&&maps[x+][y]=='#')
return ;
}
if(k==)
{
if(maps[x][y-]=='#' && maps[x-][y]=='#')
return ;
}
if(k==)
{
if(maps[x][y-]=='#' && maps[x+][y]=='#')
return ;
}
if(k==)
{
if(maps[x][y+]=='#' && maps[x-][y]=='#')
return ;
}
}
return ;
} int bfs(node s,node o)
{
memset(vis,);
queue <node>Q;
Q.push(s);
vis[s.x][s.y]=;
while(Q.size())
{
node p,q;
p=Q.front();
Q.pop();
if(p.x==o.x && p.y==o.y)
return p.step;
for(int i=;i<=;i++)
{
q.x=p.x+dis[i][];
q.y=p.y+dis[i][];
if(IF(q.x,q.y,p.x,p.y,i)==)
{
q.step=p.step+;
Q.push(q);
vis[q.x][q.y]=;
}
}
}
return -;
} int main()
{
int T,k;
scanf("%d",&T);
while(T--)
{
int flag=;
scanf("%d %d %d",&n,&m,&k);
for(int i=;i<n;i++)
{
scanf("%s",maps[i]);
}
for(int i=;i<=k;i++)
{
scanf("%d %d",&e[i].x,&e[i].y);
e[i].step=;
if(i!= && i!=)
{
if(e[i].x==e[].x && e[i].y==e[].y)
flag=;
}
}
if(flag==)
{
printf("-1\n");
continue;
}
int ans=,sum=;;
for(int i=;i<=k;i++)
{
for(int j=i+;j<=k;j++)
{
maps[e[j].x-][e[j].y-]='*';
}
node S,E;
S.x=e[i-].x-;
S.y=e[i-].y-;
S.step=;
E.x=e[i].x-;
E.y=e[i].y-;
E.step=;
ans=bfs(S,E);
if(ans==-)
{
sum=-;
break;
}
else
sum+=ans;
for(int j=i+;j<=k;j++)
{
maps[e[j].x-][e[j].y-]='.';
}
}
printf("%d\n",sum);
}
return ;
}
2015轻院校赛 B 迷宫 (bfs)的更多相关文章
- 2015轻院校赛 D 社交网络(排列组合)
http://acm.zznu.edu.cn/problem.php?id=1964 题目描述 输入 输出 样例输入 2 2 1 0 1 1 0 3 1 0 1 1 1 0 1 1 1 0 样例输出 ...
- 2015北京网络赛 G Boxes BFS+打表
G Boxes 题意:n个位置摆有n个箱子,每次移动只能把相邻的垒起来,且上面的必须小于下面的.求摆成升序需要移动多少步. 思路:这里的n很小,只有7.但是bfs最快的情况需要2s左右,所以就打表了. ...
- 【DFS+堆的二叉树结构】15轻院校赛-J-堆
[题目链接:J-堆] 1734: 堆 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 239 Solved: 113 SubmitStatusWeb B ...
- 【二叉树、堆】15轻院校赛-J-堆
原题:http://acm.zzuli.edu.cn/problem.php?cid=1099&pid=9 [描述] [输入] [输出] Sample Input 3 1 10 3 10 5 ...
- 轻院校赛-zzuli 2266: number【用每位的二进制的幂的和来进行hash(映射)处理】
zzuli 2266: number 大致题意: 给定n,问有多少数对<x, y>满足: x, y∈[1, n], x < y x, y中出现的[0, 9] ...
- ZOJ 1649 Rescue(有敌人迷宫BFS)
题意 求迷宫中从a的位置到r的位置须要的最少时间 经过'.'方格须要1s 经过'x'方格须要两秒 '#'表示墙 因为有1s和2s两种情况 须要在基础迷宫bfs上加些推断 令到达每一个点的时间初 ...
- 2015北京网络赛 D-The Celebration of Rabbits 动归+FWT
2015北京网络赛 D-The Celebration of Rabbits 题意: 给定四个正整数n, m, L, R (1≤n,m,L,R≤1000). 设a为一个长度为2n+1的序列. 设f(x ...
- 2015北京网络赛 J Scores bitset+分块
2015北京网络赛 J Scores 题意:50000组5维数据,50000个询问,问有多少组每一维都不大于询问的数据 思路:赛时没有思路,后来看解题报告也因为智商太低看了半天看不懂.bitset之前 ...
- 2015北京网络赛 Couple Trees 倍增算法
2015北京网络赛 Couple Trees 题意:两棵树,求不同树上两个节点的最近公共祖先 思路:比赛时看过的队伍不是很多,没有仔细想.今天补题才发现有个 倍增算法,自己竟然不知道. 解法来自 q ...
随机推荐
- Android-Emulator使用
1.查看当前android支持的avd版本 2.创建Emulator avd: android create avd -n magicyu -t 2 -n后面接需要创建avd的名字,-t后面接需要创建 ...
- 汇编3栈帧,参数传递,串操作,混合汇编,x64,asm文件
基础知识2 选择结构 通过判断 + 条件跳转指令来实现 循环结构 通过判断 + 条件跳转指令来实现(会有一个向上跳转的语句) 函数调用约定 C调用约定: 由外部平衡栈 标准调用约定 : 由函数内部平衡 ...
- 在Vue中遇到的各种坑 及性能提升
Vue: (1) 没有再模板里引用data数据,会不会引起update.beforeUpdate生命周期函数的执行? 不会 (2)组件改成异步 (3)v-once (4)如果不用template ...
- vue 组件相互传值
Part.1 传值几种方式 在写项目时,遇到组件传值问题,特此记录一波~~~ (1) 父传子 (2) 子传父 (2) 兄弟组件传值 Part.2 父传子 顾名思义,就是父组件传值给子组件 子 ...
- 产生多种anchor的代码讲解!很好!
http://blog.csdn.net/xzzppp/article/details/52317863 源代码:https://github.com/rbgirshick/py-faster-rcn ...
- SQL Server 删除表的默认值约束
首先查出字段的默认值约束名称,然后根据默认值约束名称删除默认值约束 ) select @constraintName = b.name from syscolumns a,sysobjects b w ...
- j数组对象去重
var Arrlist = [ {name:"张三",age:25,time:"2018-07-30 17:45:13"}, {name:"赵六&qu ...
- 自定义函数导致的sql性能问题
同事说,某某报表跑的很慢,让我调查一下 优化前:该报表整体需要跑4小时以上. sql代码如下 SELECT /*省略多数查询字段*/ REP_FUN_REFCODEVALUE /*自定义函数*/ (P ...
- python基础——7(函数)
一.函数的定义(函数一定是先定义,后引用) 函数是完成特定功能的代码块. def:声明函数的关键字 fun:函数变量名 ():参数列表,参数可以是0-n个,但是()不能丢 函数体:实现功能的具体代码 ...
- vs2017编译boost 1.70.0
目前最新版本的boost库是1.70.0.现在在学习使用cinatra搭建c++的http服务器,需要用到boost库中的asio,下载了一下最新版本的boost库,捣鼓了半天. 1.下载 boost ...