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 ...
随机推荐
- 如何通过Java代码判断当前的环境是否支持JRE 9
JDK9已经出来有一段时间了,因此很多流行的Java应用纷纷增添了对JDK9乃至JDK10的支持,比如Tomcat. 我们通过这个链接下载最新的Tomcat源文件包,总共7MB: https://to ...
- javaee 第11周
1.JPQL查询 JPQL全称Java Persistence Query Language 基于首次在EJB2.0中引入的EJB查询语言(EJB QL),Java持久化查询语言(JPQL)是一种可移 ...
- Android(java)学习笔记167:横竖屏切换时Activity的生命周期
1.横竖屏切换的生命周期 默认情况下横竖屏切换,先销毁再创建 2.有的时候,默认情况下的横竖屏切换(先销毁再创建),对应用户体验是不好的,比如是手机游戏横竖屏切换对游戏体验非常不好,下面两种方 ...
- C#飞行棋总结
以下是掷色子的一个代码,比较有代表性,里面的逻辑和内容都已注释,可通过注释了解这一方法的运作模式. public static void RowTouZi(int playerPos) //掷色子 { ...
- DROP FUNCTION - 删除一个函数
SYNOPSIS DROP FUNCTION name ( [ type [, ...] ] ) [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP FUNCTION ...
- Vickers Vane Pump - Hydraulic Vane Pump Failure: Cavitation, Mechanical Damage
One of our readers recently wrote to me about the following questions: “Recently, we purchased a sec ...
- js&jquery页面加载完执行
js <script type=”text/javascript”> window.onload=function (){ var userName=”xiaoming”; alert(u ...
- poj 1664放苹果(转载,不详细,勿点)(递归)
题目和别人的解析传送门 我的代码 #include<bits/stdc++.h> using namespace std; int f(int m,int n) { ) ; ||m==) ...
- luogu P2241 统计方形
题目背景 1997年普及组第一题 题目描述 有一个n*m方格的棋盘,求其方格包含多少正方形.长方形 输入输出格式 输入格式: n,m因为原来数据太弱,现规定m小于等于5000,n小于等于5000(原来 ...
- Mysql 查询多个字段去重复
今天需要统计信息,但是有过个重复的数据,需要去除,找了如下方法: SELECT *, COUNT(DISTINCT phone ) FROM apply_info GROUP BY phone