hihocoder #1613 : 墨水滴 bfs+优先队列
来源:互联网 发布:怎样删除淘宝上的地址 编辑:程序博客网 时间:2024/03/28 19:18
#1613 : 墨水滴
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
小Ho有一张白纸,上面有NxN个格子。小Ho可以选择一个格子(X, Y),在上面滴一滴墨水。如果这滴墨水的颜色深度是G,那么这个格子也会被染成深度为G的格子。同时周围的格子也会被这滴墨水浸染,不过颜色深度会略微降低。具体来说,如果一个格子距离(X, Y)的曼哈顿距离是D,那么它会被染成深度为max{0, G-D}的格子。
例如在(3, 3)滴一滴颜色深度为10的墨水,则(2, 3)(4, 3)(3, 2)(3, 4)四个格子会被染成深度为9,(1, 3)(2, 2)(2, 3)(3, 1)(3, 5)(4, 2)(4, 4)(5, 3)会被染成深度为8……
现在小Ho在K个格子中都滴了一滴墨水。于是一个格子可能被多滴墨水浸染,这时它的颜色深度是单滴墨水浸染时最高的颜色深度。
给定K滴墨水的位置和颜色深度,你能帮小Ho算出最后整张白纸上所有格子的颜色深度吗?
输入
第一行包含两个整数N和K。
以下K行每行包含三个整数Xi, Yi和Gi。
对于30%的数据, 1 ≤ N, K ≤ 100
对于100%的数据,1 ≤ N ≤ 1000 1 ≤ K ≤ 10000 0 ≤ Xi, Yi < N 0 ≤ Gi < 2048
输出
输出一个NxN的矩阵,代表每个格子最终的颜色深度
样例输入
3 2
0 0 10
2 2 10
样例输出
10 9 8
9 8 9
8 9 10
思路:每次bfs最大高度的位置往四周流,需要加访问数组,传递的值要大于等于1。注意越界。最坑的是单实例,RE了n次,还好有大佬提醒。
#include <bits/stdc++.h>using namespace std;const int MAXN = 1005;bool vis[MAXN][MAXN];int dist[MAXN][MAXN];int dx[4]= {1,0,-1,0};int dy[4]= {0,1,0,-1};int n;struct node{ int x, y, k; bool operator < (const node &a)const { return k<a.k; }};priority_queue<node>q;void bfs(){ while(!q.empty()) { node tmp = q.top(); q.pop(); if(!vis[tmp.x][tmp.y]) { vis[tmp.x][tmp.y]=true; dist[tmp.x][tmp.y]=tmp.k; } else continue; int x=tmp.x, y=tmp.y; int nx, ny; for(int i=0; i<4; ++i) { nx=x+dx[i]; ny=y+dy[i]; if(!vis[nx][ny]&&nx>=0&&nx<n&&ny<n&&ny>=0) { if(tmp.k-1>=1) q.push((node) { nx,ny,tmp.k-1 }); } } }}int main(){ int k; scanf("%d %d", &n, &k); int x,y,c; memset(vis, false, sizeof(vis)); memset(dist, 0, sizeof(dist)); for(int i=1; i<=k; ++i) { scanf("%d %d %d", &x, &y, &c); q.push((node) { x, y, c }); } bfs(); for(int i=0; i<n; ++i) { for(int j=0; j<n; ++j) printf("%d%c", dist[i][j], " \n"[j==n-1]); } return 0;}
- hihocoder #1613 : 墨水滴 bfs+优先队列
- hiho 1613 墨水滴 [Offer收割]编程练习赛32 Problem C 优先队列+BFS
- 优先队列+BFS
- hdu1242优先队列BFS
- HDU4198-BFS+优先队列
- acmdream1191 bfs+优先队列
- Hdu2822Dogs bfs+优先队列
- hdu4198-优先队列+bfs
- BFS+队列优先
- 优先队列+BFS
- hdu5040 优先队列+bfs
- HDU1026 bfs+优先队列
- hdu1071Nightmare(BFS+优先队列)
- HDU2026 BFS+优先队列
- HDOJ1026 优先队列bfs
- HDU1242 BFS+优先队列
- BFS-优先队列
- 优先队列+bfs 模板
- codeforces 182D KMP+math
- Windows下常用的100个CMD指令以及常见的操作
- 购物车逻辑
- MD5Hash加密工具类(利用随机盐)
- 项目屏幕适配
- hihocoder #1613 : 墨水滴 bfs+优先队列
- oracle学习笔记 字符集正确设置及相关操作
- Java基础总结
- KDTree简单理解
- ClickOnce 发布WinForm应用程序(非签名方式)
- XRecyclerView使用
- 数据结构:编写病人看病模拟程序(C/C 艹)
- Python os.SEEK_SETs 代码实例
- Ubuntu16.04 terminate called after throwing an instance of 'std::logic_error'