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)最大
随机推荐
- java之静态代理
© 版权声明:本文为博主原创文章,转载请注明出处 定义: - 为其他对象提供一种代理以控制对这个对象的访问 组成: 抽象角色:通过接口或抽象类声明真正角色实现的业务方法 真实角色:实现抽象角色,定义真 ...
- Eclipse配置总结
按照公司要求,开发环境使用Eclipse Juno版本,需要安装maven插件和RTC插件. 经过一下午的尝试,总结经验教训: 1.eclipse安装maven的m2ec ...
- vs2013中opencv的配置
下面开始介绍如何配置,我用的系统是win8.1 64位系统,vs用的是vs3013 ultimate,先到官网下载opencv 我用的的版本是最新的版本3.0 ALPHA,下载下来直接执行即可,实际上 ...
- Java Web开发笔记
问题: 读取资源文件问题 servletContext.getRealPath() servletContext.getResouce().getPath() setvletContext.getRe ...
- saltstack之服务管理
1.启动服务 /srv/salt/service/nfs.sls rpcbind: service.running: - enable: True #开机自动启动 # - enable: False ...
- C语言基础知识【判断】
C 判断1.判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的).C 语言把任何非零和非空的值假定为 true,把零或 null ...
- windows下composer安装
第一步:配置path.这里我的php在C:\… \php目录下面. 第二步: 方法一: 使用安装程序 这是将 Composer 安装在你机器上的最简单的方法. 下载并且运行 Composer-Setu ...
- http => https 升级
准备证书 阿里云安全(云盾)-> CA证书服务,购买证书,个人测试的话可以使用免费的,期限1年. 购买证书后,把域名与证书进行绑定,提交审核,大概10分钟左右,正常情况下审核就可以通过.证书准备 ...
- 【python】-- Socket粘包问题 ,解决粘包的几种方法、socket文件下载,md5值检验
上一篇随笔:“socket 接收大数据”,在win系统上能够运行,并且解决了大数据量的数据传输出现的问题,但是运行在linux系统上就会出现如下图所示的情况: 就是服务端两次发送给客户端的数据(第一次 ...
- 我的Android进阶之旅------>android中getLocationInWindow 和 getLocationOnScreen的区别
View.getLocationInWindow(int[] location) 一个控件在其父窗口中的坐标位置 View.getLocationOnScreen(int[] location) 一个 ...