codeforces 60B bfs
题意:给出一个六面体分为k层,每层n行m列,每个小立方体有'.'(空)与'#'(障碍)的状态,第一层某个空的位置有一个水龙头,水流每次往六个方向流动(...).最少时间水流能把立方体空的部分填满。
思路:从水龙头开始bfs一遍。每步让所有能转移到的空的点入队,总步数即为答案。
#include<cstdio>
#include<queue>
#include<iostream>
using namespace std;
struct Nod {
int x;
int y;
int z;
};
char node[][][]; //第几层第几行第几列
int main()
{
int k,n,m;
while(~scanf("%d%d%d",&k,&n,&m)) {
int sum=;
getchar();
getchar();
for(int i=;i<=k;i++) {
for(int j=;j<=n;j++) {
for(int p=;p<=m;p++) {
scanf("%c",&node[i][j][p]);
}
getchar();
}
getchar();
} queue<Nod> q; int sx,sy,nx,ny,nz;
scanf("%d%d",&sx,&sy);
Nod nod;
nod.x=sx;
nod.y=sy;
nod.z=;
q.push(nod);
sum++;
node[][sx][sy]='#'; while(!q.empty()) {
nx=q.front().x;
ny=q.front().y;
nz=q.front().z;
q.pop();
if(ny+<=m && node[nz][nx][ny+]=='.') {
nod.x=nx;nod.y=ny+;nod.z=nz;
q.push(nod);
sum++;
node[nz][nx][ny+]='#';
}
if(ny->= && node[nz][nx][ny-]=='.') {
nod.x=nx;nod.y=ny-;nod.z=nz;
q.push(nod);
sum++;
node[nz][nx][ny-]='#';
}
if(nx+<=n && node[nz][nx+][ny]=='.') {
nod.x=nx+;nod.y=ny;nod.z=nz;
q.push(nod);
sum++;
node[nz][nx+][ny]='#';
}
if(nx->= && node[nz][nx-][ny]=='.') {
nod.x=nx-;nod.y=ny;nod.z=nz;
q.push(nod);
sum++;
node[nz][nx-][ny]='#';
}
if(nz->= && node[nz-][nx][ny]=='.') {
nod.x=nx;nod.y=ny;nod.z=nz-;
q.push(nod);
sum++;
node[nz-][nx][ny]='#';
}
if(nz+<=k && node[nz+][nx][ny]=='.') {
nod.x=nx;nod.y=ny;nod.z=nz+;
q.push(nod);
sum++;
node[nz+][nx][ny]='#';
}
}
cout<<sum<<endl;
}
return ;
}
大腿说太年轻写的如此不优雅,debug很累
#include<cstdio>
#include<queue>
#include<iostream>
using namespace std;
struct Nod {
int x;
int y;
int z;
};
char node[][][]; //第几层第几行第几列 int xx[]={,,,,-,};
int yy[]={,,-,,,};
int zz[]={,-,,,,};
int main()
{
int k,n,m;
while(~scanf("%d%d%d",&k,&n,&m)) {
int sum=;
getchar();
getchar();
for(int i=;i<=k;i++) {
for(int j=;j<=n;j++) {
for(int p=;p<=m;p++) {
scanf("%c",&node[i][j][p]);
}
getchar();
}
getchar();
} queue<Nod> q; int sx,sy,nx,ny,nz;
scanf("%d%d",&sx,&sy);
Nod nod;
nod.x=sx;
nod.y=sy;
nod.z=;
q.push(nod);
sum++;
node[][sx][sy]='#'; while(!q.empty()) {
int nx=q.front().x;
int ny=q.front().y;
int nz=q.front().z;
q.pop();
for(int i=;i<;i++) {
int X=nx+xx[i];
int Y=ny+yy[i];
int Z=nz+zz[i]; if(X>= && X<=n && Y>= && Y<=m && Z>= && Z<=k) {
if(node[Z][X][Y]=='.') {
nod.x=X;
nod.y=Y;
nod.z=Z;
q.push(nod);
sum++;
node[Z][X][Y]='#';
}
}
}
}
cout<<sum<<endl;
}
return ;
}
小小优雅后
codeforces 60B bfs的更多相关文章
- Arthur and Walls CodeForces - 525D (bfs)
大意: 给定格点图, 每个'.'的连通块会扩散为矩形, 求最后图案. 一开始想得是直接并查集合并然后差分, 但实际上是不对的, 这个数据就可以hack掉. 3 3 **. .** ... 正解是bfs ...
- Police Stations CodeForces - 796D (bfs)
大意: 给定树, 有k个黑点, 初始满足条件:所有点到最近黑点距离不超过d, 求最多删除多少条边后, 使得原图仍满足条件. 所有黑点开始bfs, 贪心删边. #include <iostream ...
- Kilani and the Game CodeForces - 1105D (bfs)
沙茶bfs打了2小时... queue入队量太大了, 放函数里直接T了, 改成全局46ms #include <iostream> #include <algorithm> # ...
- Three Pieces CodeForces - 1065D (BFS)
链接 大意: n*n棋盘, 每个格子写有数字, 各不相同, 范围[1,n*n], 初始在数字1的位置, 可以操纵knight,bishop,rook三种棋子, 每走一步花费1, 交换棋子花费1, 问按 ...
- Fair CodeForces - 987D (bfs)
链接 大意:给定无向图边权均为1, 每个节点有一种货物, 对于每个节点, 求出拿到$s$种不同货物的最短距离 (每种货物独立计算,并且不用返回) 因为$s$较小, 直接枚举每种货物即可 所以问题就转化 ...
- Connected Components? CodeForces - 920E (bfs)
大意:给定无向图, 求补图的连通块数 bfs模拟即可, 这里用了map存图, set维护未划分的点集, 复杂度$O(nlog^2n)$, 用链表的话可以$O(n)$ #include <iost ...
- Board Game CodeForces - 605D (BFS)
大意: 给定$n$张卡$(a_i,b_i,c_i,d_i)$, 初始坐标$(0,0)$. 假设当前在$(x,y)$, 若$x\ge a_i,y\ge b_i$, 则可以使用第$i$张卡, 使用后达到坐 ...
- Codeforces 1105D (BFS)
题面 传送门 分析 考虑BFS while(棋盘没有满){ for 玩家 p{ 对p进行BFS,走s[p]步 } } 对于每个玩家p BFS的时候如果到了格子(x,y),就把\(vis[x][y]\) ...
- World Tour CodeForces - 667D (bfs最短路)
大意: 有向图, 求找4个不同的点ABCD, 使得d(A,B)+d(D,C)+d(C,A)最大
随机推荐
- 链表的艺术——Linux内核链表分析
引言: 链表是数据结构中的重要成员之中的一个.因为其结构简单且动态插入.删除节点用时少的长处,链表在开发中的应用场景许多.仅次于数组(越简单应用越广). 可是.正如其长处一样,链表的缺点也是显而易见的 ...
- jsp页面JSTL标签 <c:fn:>
函数名 函数说明 使用举例 fn:contains 判断字符串是否包含另外一个字符串 <c:if test="${fn:contains(name, searchString)}&qu ...
- Dual Camera Info
一个摄像头解决不了的问题,那就用两个:对于双摄你需要了解这些 http://www.chengshiluntan.com/wg/a/20160715/6ca0343f59789235c9419887f ...
- Java银行调度系统
具体需求如下: 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费.电话费之类业务的客户). 异步随机生成各种类型的客户,生成各类型用户的概率比例为: VIP客户:普通客户:快速客户 ...
- kafka 小案例【一】---设置但个消息集群
启动kafka服务 [ bin/kafka-server-start.sh config/server.properties ] [root@zhangxs kafka_2.]# bin/kafka- ...
- Java中HashTable和HashMap的区别
在Java中,HashTable和HashMap都是哈希表,那么它们有什么区别呢? 1.它们所继承的类不一样. HashTable和HashMap都实现了Map接口,但是它们所继承的类时不同的.H ...
- jeesite中activiti中的流程表梳理
最近在利用jeesite开发一个小系统,趁着这个机会整理了activiti中的相关表,跟踪流程,然后查看这几个表中数据的变化,可以更好地理解流程的开发.现在整理出来,希望可以帮助更多的人! 表结构 一 ...
- jquery简洁遮罩插件
/************************** *Desc:提交操作时遮罩 *Argument:type=0 全屏遮 1局部遮 *Author:Zery-Zhang *Date:2014-09 ...
- 小技巧:怎样以另外的Windows用户执行SSMS
可能会碰到这种问题.你须要在一台机器上面使用不同的Windows账户连接到SQL Server做測试.默认情况下,你须要用不同的Windows账户登录然后測试. 实际上不须要每一个windows登陆. ...
- 鸟哥的Linux私房菜-----6、文件与文件夹管理