洛谷 P2335 SDOI 2005 毒瘤 位图(也补上注释了)
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring> using namespace std;
int m,n;
int pho[200][200];
int f[200][200];
int vis[200][200],looked;
struct t{
int x,y,cost;
};
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
queue <t> q;
void bfs()
{
memset(f,0x3f,sizeof(f)); t p;
while(!q.empty())
{
p=q.front();
q.pop();
int x=p.x;
int y=p.y;
vis[x][y]++;
int cost=p.cost;
if(vis[x][y]>=looked*2) continue; //每个点在正常情况下会被访问最多n(looked)次,为了保险乘了2
if(f[x][y]<cost) continue; //类似于一个剪枝,记录在当前状态已经做过一次比他更优的计算(cost为当前距离,f标记每个点最小距离)
f[x][y]=cost;
for(int i=0;i<=3;i++)
{
if(x+dx[i]<=n&&x+dx[i]>=1&&y+dy[i]<=m&&y+dy[i]>=1)
{
t a;
a.x=x+dx[i];
a.y=y+dy[i];
a.cost=cost+1;
q.push(a);
}
}
}
return ;
}
int main()
{
scanf("%d %d",&n,&m);
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
scanf("%d",&pho[i][j]);
t b;
b.x=i;
b.y=j;
b.cost=0;
if(pho[i][j]==1)
{
looked++;
q.push(b);
}
}
bfs();
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
printf("%d ",f[i][j]);
}
printf("\n");
}
return 0;
}
好久没写广搜了,UPD(2019.6.18) 更新了部分注释,如果有问题可以评论区问,暑假应该会很快回复的
一遍过,没什么注意的,理论上每个点最多被刷新白点个数个次数,为了保险弄了个*2
洛谷 P2335 SDOI 2005 毒瘤 位图(也补上注释了)的更多相关文章
- 洛谷P2468 SDOI 2010 粟粟的书架
题意:给你一个矩形书架,每个点是这本书的页数,每次询问(x1,y1)(x2,y2)这个小矩形里最少需要取几本书使得页数和等于Hi. 题解:小数据二位前缀和预处理+二分答案,大数据一行所以用主席树做,感 ...
- 洛谷 P2335 [SDOI2005]位图
OJ检测链接:https://www.luogu.org/problem/show?pid=2335 题目描述 现在我们给出一个n*m的单色位图,且该图中至少含有一个白色的像素.我们用(i, j)来代 ...
- 洛谷 - P2335 - 位图 - 简单dp
https://www.luogu.org/problemnew/show/P2335 假如我们使用dp的话,每次求出一个点的左上方.右上方.左下方.右下方的最近的白点的距离.那么只是n²的复杂度.这 ...
- 洛谷P4242 树上的毒瘤
解:首先有个套路是一条边的权值是[两端点颜色不同].这个用树剖直接维护,支持修改. 每次询问建虚树,查询虚树上每条边的权值.然后树形DP,用开店的方法,每个点链加链查. #include <bi ...
- 洛谷 P2577 [ ZJOI 2005 ] 午餐 —— DP + 贪心
题目:https://www.luogu.org/problemnew/show/P2577 首先,想一想可以发现贪心策略是把吃饭时间长的人放在前面: 设 f[i][j] 表示考虑到第 i 个人,目前 ...
- 洛谷 P4426 - [HNOI/AHOI2018]毒瘤(虚树+dp)
题面传送门 神仙虚树题. 首先考虑最 trival 的情况:\(m=n-1\),也就是一棵树的情况.这个我相信刚学树形 \(dp\) 的都能够秒掉罢(确信).直接设 \(dp_{i,0/1}\) 在表 ...
- 洛谷P3373 线段树2(补上注释了)
毒瘤题.找了一下午+晚上的BUG,才发现原来query_tree写的是a%p; 真的是一个教训 UPD:2019.6.18 #include<iostream> #include<c ...
- 洛谷P1019 单词接龙题解(超详细注释)
https://www.luogu.org/problem/P1019 #include<cstdio> #include<cstring> #include<iostr ...
- 洛谷 P4710 「物理」平抛运动
洛谷 P4710 「物理」平抛运动 洛谷传送门 题目描述 小 F 回到班上,面对自己 28 / 110 的物理,感觉非常凉凉.他准备从最基础的力学学起. 如图,一个可以视为质点的小球在点 A(x_0, ...
随机推荐
- SwipeLayou与ScrollerView滑动冲突
在SwipeLayout内嵌套ScorllerView滑动会出现上滑滑动冲突,ScollerView不能往上滑,,,,,, mSlv.getViewTreeObserver().addOnScroll ...
- hdu 2063 过山车 (最大匹配 匈牙利算法模板)
匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最 ...
- 暴力/进制转换 Codeforces Round #308 (Div. 2) C. Vanya and Scales
题目传送门 /* 题意:问是否能用质量为w^0,w^1,...,w^100的砝码各1个称出重量m,砝码放左边或在右边 暴力/进制转换:假设可以称出,用w进制表示,每一位是0,1,w-1.w-1表示砝码 ...
- 加权平均值 WAvg”
https://wenku.baidu.com/view/13d974fff8c75fbfc77db2d3.html
- Suricata的所有运行方式模式(图文详解)
不多说,直接上干货! suricata的基本组成.Suricata是由所谓的线程(threads).线程模块 (thread-modules)和队列(queues)组成.Suricata是一个多线程的 ...
- TC609 DIV1 (500)
Problem Statement We have balls of K different colors. The colors are numbered 0 through K-1, a ...
- jacaScript数组
1.var arr=['1','2','3'] typeof arr (判断数组类型) print(arr)打印数组内容 2.arr[100]='x', 数组中间自动添加,alert(arr. ...
- Spring注解驱动开发之AOP
前言:现今SpringBoot.SpringCloud技术非常火热,作为Spring之上的框架,他们大量使用到了Spring的一些底层注解.原理,比如@Conditional.@Import.@Ena ...
- Android EventBus3.0详解
修改日志 -- 添加索引部分得细节,添加kotlin的支持方式 https://www.jianshu.com/p/31e3528ca7e5
- NavigationView的使用
代码已经分享至github:https://github.com/YanYoJun/NavigationDemo 转载请注明原文链接:http://www.cnblogs.com/yanyojun/p ...