(2015年郑州轻工业学院ACM校赛题) B迷宫
这是个简单的广搜题,注意下一下细节都能写出来, 大多数人都少考虑了一点,就是 假如 我的起始点就有一个机关, 并且不是 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迷宫的更多相关文章
- (2015年郑州轻工业学院ACM校赛题) E 汇编原理
此题属于比较麻烦的模拟题,比赛的时候是队友写的, 比赛结束之后自己也写了一遍,感觉对复杂模拟的掌控还是不行! 解析: 我感觉 ADD操作 和 MOV操作比较类似 所以就写在了一块,MUL操作单独写就行 ...
- (2015年郑州轻工业学院ACM校赛题)H 五子棋
我们最后选题策略失败,选到五子棋这题,没想到这题非常麻烦,最后也没做出来! 比赛结束后发了题解再做才做出来! 不得不说 这题真的很麻烦 一个需要比较细致分类讨论的题目.判定棋盘是否合法应考虑如下几种情 ...
- (2015年郑州轻工业学院ACM校赛题) C 数列
在我们做完B题之后就去看C题了, 发现很多人都已经做出来了, 并且一血还是我们学弟拿的, 感觉这题不难, 我们举了几个例子之后发现全是Alice 然后我们就决定意淫一下,试试看! 没想到就A了 - . ...
- (2015年郑州轻工业学院ACM校赛题) A 彩票
这是个简单的题目,其实就是判断是否是偶数, 对二进行特判一下就行了! 比赛时候我们还错两次................ 一看简单题就想抢一血,谁知到第一次提交CE, 再提交WA 汗........ ...
- (2015年郑州轻工业学院ACM校赛题) J 堆
判断是否是一个堆,把树构造好遍历一遍就OK了 #include<stdio.h> #include<iostream> #include<stack> #inclu ...
- (2015年郑州轻工业学院ACM校赛题)I 旋转图像
矩阵旋转,写一个转 90° 的函数就行了, 注意每次要将 长和宽的值进行交换就行了. #include<stdio.h> #include<iostream> #include ...
- (2015年郑州轻工业学院ACM校赛题) G 矩阵
看这道题的时候就感觉用一点动归思想+暴力 就能过了. #include<stdio.h> #include<iostream> #include<stack> #i ...
- 20170416郑州市轻工业学院ACM校赛
这是个星期天,但是,这种非一线城市,重点城市什么的高中,放假从来不按套路出牌,几乎可以说能给你一天是福气.当然,比县里好的多,问在县里上高中的初中同学,放假更是比我们一天里的午休+晚上吃饭时间还要少. ...
- 第八届郑州轻工业学院ACM(程序设计大赛)校内预选赛
郑州轻工业学院有一个大赛,把几个有趣的题目分享一下.下面是题目连接,喜欢了就点点... 斗破苍穹 礼上往来 统计人数 神の数 炉石传说 Mathematics and Geometry 马拉松后记 斗 ...
随机推荐
- [转] Nginx + CGI/FastCGI + C/Cpp
接着上篇<Nginx安装与使用>,本篇介绍CGI/FASTCGI的原理.及如何使用C/C++编写简单的CGI/FastCGI,最后将CGI/FASTCGI部署到nginx.内容大纲如下: ...
- Effective C++ 总结(一)
一.让自己习惯C++ 条款01:视C++为一个语言联邦 为了更好的理解C++,我们将C++分解为四个主要次语言: C.说到底C++仍是以C为基础.区块,语句,预处理器,内置数据类型, ...
- 那些年不错的Android开源项目(转)
第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...
- 正则表达式中/i,/g,/ig,/gi,/m的区别和含义
正则表达式中/i,/g,/ig,/gi,/m的区别和含义 /i (忽略大小写)/g (全文查找出现的所有匹配字符)/m (多行查找)/gi(全文查找.忽略大小写)/ig(全文查找.忽略大小写)
- LNMP wget 记录
源码下载 下载cmake(MySQL编译工具) http://www.cmake.org/files/v3.0/cmake-3.0.0.tar.gz 下载libmcrypt(PHPlibmcrypt模 ...
- 对require.js 的使用进行总结
一.为什么要使用require.js 首先一个页面如果在加载多个js文件的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长:其次,由于js文件之间存在依赖关系,因此必须严格保证加载 ...
- Asp.Net中的session配置
一.InProc模式(缺省模式) <sessionState mode="InProc" timeout="20"></sessionStat ...
- Iframe之间及iframe与父窗体之间值的传递
方法一:ScriptManager.RegisterClientScriptBlock(this,typeof(Page), "NoInformation", "wind ...
- iOS 中的传值方式
一. 属性传值 将A页面所拥有的信息通过属性传递到B页面使用 很常用的传值,也很方便,但是要拿到类的属性.例如: B页面定义了一个naviTitle属性,在A页面中直接通过属性赋值将A页面中的值传 ...
- JavaScript-学习一加载不动
为先加载的js后加载的html 加载完js运行时因为未加载html的原因导致找不到js所控制的元素 所以解决的方法就是把js放到控制元素的下方 或者html的底部 做成函数的时候可以放在头部,也就是说 ...