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)的更多相关文章

  1. 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 样例输出 ...

  2. 2015北京网络赛 G Boxes BFS+打表

    G Boxes 题意:n个位置摆有n个箱子,每次移动只能把相邻的垒起来,且上面的必须小于下面的.求摆成升序需要移动多少步. 思路:这里的n很小,只有7.但是bfs最快的情况需要2s左右,所以就打表了. ...

  3. 【DFS+堆的二叉树结构】15轻院校赛-J-堆

    [题目链接:J-堆] 1734: 堆 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 239  Solved: 113 SubmitStatusWeb B ...

  4. 【二叉树、堆】15轻院校赛-J-堆

    原题:http://acm.zzuli.edu.cn/problem.php?cid=1099&pid=9 [描述] [输入] [输出] Sample Input 3 1 10 3 10 5 ...

  5. 轻院校赛-zzuli 2266: number【用每位的二进制的幂的和来进行hash(映射)处理】

    zzuli 2266: number 大致题意:   给定n,问有多少数对<x, y>满足: x, y∈[1, n], x < y            x, y中出现的[0, 9] ...

  6. ZOJ 1649 Rescue(有敌人迷宫BFS)

    题意 求迷宫中从a的位置到r的位置须要的最少时间  经过'.'方格须要1s  经过'x'方格须要两秒  '#'表示墙 因为有1s和2s两种情况  须要在基础迷宫bfs上加些推断 令到达每一个点的时间初 ...

  7. 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 ...

  8. 2015北京网络赛 J Scores bitset+分块

    2015北京网络赛 J Scores 题意:50000组5维数据,50000个询问,问有多少组每一维都不大于询问的数据 思路:赛时没有思路,后来看解题报告也因为智商太低看了半天看不懂.bitset之前 ...

  9. 2015北京网络赛 Couple Trees 倍增算法

    2015北京网络赛 Couple Trees 题意:两棵树,求不同树上两个节点的最近公共祖先 思路:比赛时看过的队伍不是很多,没有仔细想.今天补题才发现有个 倍增算法,自己竟然不知道.  解法来自 q ...

随机推荐

  1. EF为什么向我的数据库再次插入已有对象?(ZT)

    最近做了个多对多对实体对象,结果发现每次只要增加一个子实体,就会自动添加一个父实体进去,而不管该父实体是否已经存在. 找了好久,终于找到这篇文章,照文章内容来看,应该是断开连接导致的. 原文地址:ht ...

  2. ML-学习提纲1

    http://www.sohu.com/a/130379077_468714 本文用一系列「思维导图」由浅入深的总结了「统计学」领域的基础知识,是对之前系列文章做的一次完整的梳理,也是我至今为止所有与 ...

  3. 解决异常System.Runtime.Interopservices.COMException RequestLock问题

    工具——导入导出设置,重置调试设置就可以了,这是调试文件的异常

  4. windows常用bat脚本

    windows常用bat脚本 https://blog.csdn.net/longyan_csc/article/details/78737722 Windows_批处理+任务计划实现文件夹定时备份 ...

  5. 【洛谷2019 OI春令营】期中考试

    T68402 扫雷 题目链接:传送门 题目描述 扫雷,是一款单人的计算机游戏.游戏目标是找出所有没有地雷的方格,完成游戏:要是按了有地雷的方格,游戏失败.现在 Bob 正在玩扫雷游戏,你作为裁判要判断 ...

  6. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数)

    *题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) public class 第三十九题按条件计算 ...

  7. CF1179D Fedor Runs for President [DP,斜率优化]

    Codeforces 思路 考虑把连的那两个点中间的链提出来,那么就会变成一条链,链上的每个点挂着一棵子树的形式. 设那些子树的大小为\(S_1,S2,\cdots\),那么新加的简单路径个数就是 \ ...

  8. python3.x Day6 协程

    协程:#定义来自牛人alex博客协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程.协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈 ...

  9. python基础教程之pymongo库

    1. 引入 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库. 1.  安装 pi ...

  10. day22 02 面向对象的交互

    day22 02 面向对象的交互 一.三种编程方式 1.面向过程编程:核心是过程,流水线式思维 优点:极大降低了写程序的复杂程度,只需要顺着要执行的步骤,堆叠代码即可 缺点:一套流水线或者流程就用来解 ...