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)最大
随机推荐
- Swift_1_基本数据类型
import Foundation println("Hello, World!"); var v1 = 1; var v2 = 2; println(" v1 is \ ...
- 第一次接触solr的过程记录
1.以solr-4.6.0.tgz为例进行学习 2.第一步,看的是 tutorial.html(位于solr-4.6.0/docs目录),默认solr以jetty作为servlet容器 3.但是,如果 ...
- Python snap
orderedDict enum sys.path 注册装饰器 装饰器检查 入参 Flask01 flask_script flask blue print functools.partial dns ...
- Memcached 常用的方法
Memcache常用方法 Memcache::add — 添加一个值,如果已经存在,则返回false Memcache::addServer — 添加一个可供使用的服务器地址 Memcache::cl ...
- Android Studio 2.3版本 Run项目不能自动启动APP的问题 (转)
参考: http://blog.csdn.net/lucasey/article/details/61071377 Android Studio 升级到2.3版本后 运行项目后,只是安装上了,而APP ...
- saltstack内置执行模块groupadd
groupadd模块用于命令行管理用户组 salt.modules.groupadd.add(name, gid=None, system=False) 添加一个用户到指定GID 例:salt '*' ...
- Mysql无法创建函数解决办法
执行: set global log_bin_trust_function_creators =1; 原文参照:http://www.cnblogs.com/xd502djj/archive/2012 ...
- 【BZOJ2844】albus就是要第一个出场 高斯消元求线性基
[BZOJ2844]albus就是要第一个出场 Description 已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 <= x <= n }, S 的幂集2 ...
- Intellij IDEA打开多项目窗口
我版本是2016.02.04 其他版本可能不一样的设置
- PHP的依赖管理工具----composer
安装Composer 参考:https://getcomposer.org/doc/01-basic-usage.md composer 是PHP依赖管理工具 PHP最低版本要求5.3.2,需要允许o ...