这是个简单的广搜题,注意下一下细节都能写出来, 大多数人都少考虑了一点,就是 假如 我的起始点就有一个机关, 并且不是 1 号机关,

这样的话是无结果的。不懂的可以测试一下代码下面的数据

#include<stdio.h>
#include<iostream>
#include<stack>
#include<queue>
#include<math.h>
#include<stdlib.h>
#include<cstring>
using namespace std;
#define Max(a,b) (a>b?a:b)
#define Min(a,b) (a<b?a:b)
#define INF 0xfffffff
#define maxn 110
struct Point
{
int x, y, step;
}B[maxn];
char maps[maxn][maxn];
bool vis[maxn][maxn];
int dir[][] = { {-,-},{-,},{,-},{,},{-,},{,},{,-},{,}};
int n, m, k; bool OK(Point P,int i,int End)
{
if(P.x >= && P.x < n && P.y >= && P.y < m && maps[P.x][P.y] != '#' && maps[P.x][P.y] <= End+'' && !vis[P.x][P.y])
{
if(i < )
{
if(i == && maps[P.x+][P.y] == '#' && maps[P.x][P.y+] == '#')
return false;
if(i == && maps[P.x+][P.y] == '#' && maps[P.x][P.y-] == '#')
return false;
if(i == && maps[P.x-][P.y] == '#' && maps[P.x][P.y+] == '#')
return false;
if(i == && maps[P.x-][P.y] == '#' && maps[P.x][P.y-] == '#')
return false;
}
return true;
} return false;
} int BFS(int Star,int End)
{
Point P, Pn;
queue<Point> Q; memset(vis, false, sizeof(vis)); Q.push(B[Star]); if(B[End].x == B[].x && B[End].y == B[].y && End != )
return -; while( !Q.empty() )
{
P = Q.front();
Q.pop(); if(P.x == B[End].x && P.y == B[End].y)
return P.step; for(int i=; i<; i++)
{
Pn.x = P.x + dir[i][];
Pn.y = P.y + dir[i][];
Pn.step = P.step + ; if( OK(Pn,i, End) )
{
vis[Pn.x][Pn.y] = true;
Q.push(Pn);
}
}
}
return -;
} int main()
{
int T, i; cin >> T; while(T--)
{
cin >> n >> m >> k; for(i=; i<n; i++)
scanf("%s", maps[i]); for(i=; i<=k; i++)
{
cin >> B[i].x >> B[i].y;
B[i].x --, B[i].y --;
B[i].step = ;
maps[B[i].x][B[i].y] = i + '';
}
int ans, sum;
ans = sum = ; for(i=; i<k; i++)
{
ans = BFS(i, i+); if(ans == -)
break; sum += ans;
} if( k == i)
printf("%d\n", sum);
else
printf("-1\n");
}
return ;
} /* 3
3 3 2
...
#..
...
1 1
1 2
1 1 答案 -1
*/

(2015年郑州轻工业学院ACM校赛题) B迷宫的更多相关文章

  1. (2015年郑州轻工业学院ACM校赛题) E 汇编原理

    此题属于比较麻烦的模拟题,比赛的时候是队友写的, 比赛结束之后自己也写了一遍,感觉对复杂模拟的掌控还是不行! 解析: 我感觉 ADD操作 和 MOV操作比较类似 所以就写在了一块,MUL操作单独写就行 ...

  2. (2015年郑州轻工业学院ACM校赛题)H 五子棋

    我们最后选题策略失败,选到五子棋这题,没想到这题非常麻烦,最后也没做出来! 比赛结束后发了题解再做才做出来! 不得不说 这题真的很麻烦 一个需要比较细致分类讨论的题目.判定棋盘是否合法应考虑如下几种情 ...

  3. (2015年郑州轻工业学院ACM校赛题) C 数列

    在我们做完B题之后就去看C题了, 发现很多人都已经做出来了, 并且一血还是我们学弟拿的, 感觉这题不难, 我们举了几个例子之后发现全是Alice 然后我们就决定意淫一下,试试看! 没想到就A了 - . ...

  4. (2015年郑州轻工业学院ACM校赛题) A 彩票

    这是个简单的题目,其实就是判断是否是偶数, 对二进行特判一下就行了! 比赛时候我们还错两次................ 一看简单题就想抢一血,谁知到第一次提交CE, 再提交WA 汗........ ...

  5. (2015年郑州轻工业学院ACM校赛题) J 堆

    判断是否是一个堆,把树构造好遍历一遍就OK了 #include<stdio.h> #include<iostream> #include<stack> #inclu ...

  6. (2015年郑州轻工业学院ACM校赛题)I 旋转图像

    矩阵旋转,写一个转 90° 的函数就行了, 注意每次要将 长和宽的值进行交换就行了. #include<stdio.h> #include<iostream> #include ...

  7. (2015年郑州轻工业学院ACM校赛题) G 矩阵

    看这道题的时候就感觉用一点动归思想+暴力 就能过了. #include<stdio.h> #include<iostream> #include<stack> #i ...

  8. 20170416郑州市轻工业学院ACM校赛

    这是个星期天,但是,这种非一线城市,重点城市什么的高中,放假从来不按套路出牌,几乎可以说能给你一天是福气.当然,比县里好的多,问在县里上高中的初中同学,放假更是比我们一天里的午休+晚上吃饭时间还要少. ...

  9. 第八届郑州轻工业学院ACM(程序设计大赛)校内预选赛

    郑州轻工业学院有一个大赛,把几个有趣的题目分享一下.下面是题目连接,喜欢了就点点... 斗破苍穹 礼上往来 统计人数 神の数 炉石传说 Mathematics and Geometry 马拉松后记 斗 ...

随机推荐

  1. [Falcor] Indroduce to Model

    How to work with JSON data indirectly through a Falcor Model. The Falcor Model allows you to work wi ...

  2. Windows Minifilter驱动 - 调式 (4)

    写不论什么程序动态调试是很重要的.驱动开发也不例外. 通常如今写驱动的时候,都是在VM上跑的,调试手段基本也是本地windbg + 虚拟机. 虚拟机配置 我用的是win7, 第一步,看以下.成功运行后 ...

  3. Python之路,Day14 - It's time for Django

    Python之路,Day14 - It's time for Django   本节内容 Django流程介绍 Django url Django view Django models Django ...

  4. 分页技术之PageDataSource类

    之前给大家介绍了分页技术之Gridview控件,今天给大家介绍另外一种分页技术,采用PageDataSource类 + Repeater控件来实现. 前台只需要拖出一个Repeater控件来绑定要显示 ...

  5. git针对Android Studio的使用

    1.将文件放到项目根目录下 .gitignore 文件内容: *.iml.gradle/local.properties/.idea/workspace.xml/.idea/libraries.DS_ ...

  6. excel - 相等判断

    函数使用例子: =IF(EVALUATE(B23)=C23,"正确","错误") 即判断单元格'B23'与'C23'是否相等,若为true,则返回"正 ...

  7. iOS开发中EXC_BAD_ACCESS的另类原因

    今天偶然学习iOS开发的时候碰到一个EXC_BAD_ACCESS的异常,经查资料得到的解释是由于访问了已经被回收了堆内存对象导致的,参考: http://code.tutsplus.com/tutor ...

  8. Delphi 用ToolButton和MonthCalendar实现DateTimePicker的功能

    效果图如下: 实现平台:xp xe2,其中以上功能的实现,核心主要是参考了万一老师的资料,连接:http://www.cnblogs.com/del/archive/2011/05/12/204411 ...

  9. [转载] extern "C"的用法解析

    本文转载自: http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html   1.引言 C++语言的创建初衷是“a better ...

  10. rhel-server-6.2-i386安装gcc、g++步骤

    安装的版本:rhel-server-6.2-i386 RHEL 6.2默认是没有gcc和gcc-c++环境的,而且我也没有$购买正版服务.只能本地安装了,总结方法如下: 上传安装镜像rhel-serv ...