网站设计 北京店网站文章做百度排名
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:28
当前位置: 首页 > news >正文
网站设计 北京店,网站文章做百度排名,关于网站建设论文的结束语,适合网络营销的产品《算法竞赛快冲300题》将于2024年出版#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码#xff0c;以中低档题为主#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “
造…《算法竞赛·快冲300题》将于2024年出版是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码以中低档题为主适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “
造电梯” 链接
http://oj.ecustacm.cn/problem.php?id1790 题目描述
【题目描述】 现在给你一张建筑的平面图按照要求建筑的每一个部分都应该是轮椅使用者可以到达的这意味着必须安装电梯。 给定的平面图是一个nm的矩阵里面的数字表示这个位置的高度。可以在建筑中的任意位置放置电梯电梯可以停在所有楼层。 需要保证可以使用电梯到达所有高楼层。相同高度的楼层之间是互通的联通准则是四联通。 需要求解最少需要多少个电梯注意高度为1的不需要电梯。 下图展示了样例2的可视化三维图。
【输入格式】 输入第一行为n和m(1≤n,m≤500)。 接下来n行每行m个整数xij表示平面图0≤xij≤10^9。 【输出格式】 输出最少电梯数量 【输入样例】
样例1
2 3
1 2 3
1 3 2样例2
6 7
0 0 0 0 0 0 0
0 1 2 3 2 1 0
0 1 2 3 2 1 0
0 0 0 0 0 0 0
0 1 0 5 0 0 0
0 0 0 0 0 0 0【输出样例】
样例1
2样例2
2题解 电梯是装在建筑内部的例如样例2高度5的柱子内部需要一个电梯楼梯状的建筑也需要一个电梯。 注意一个建筑内部可能需要不止一个电梯例如平面上一个建筑的高度是{5, 2, 4}那么需要在5和4上建2个电梯。 本题是“洪水填充《算法竞赛》清华大学出版社罗勇军郭卫斌著120页3.3 洪水填充”的应用从最高处开始倒水那么水会平流或者往下流这相当于建了一部电梯这次倒水没有流到的地方继续从下一个最高处倒水… 以样例2为例 1从最高的“5”开始倒水水会平流或往下流那么会继续淹没所有的“0”。这次倒水相当于建设了一部电梯。没有被这次倒水淹没的有第二行和第三行的“1 2 3 2 1”还有倒数第二行的“1”。 2继续从剩下的最高点“3”开始倒水水会平流或往下流那么第二行和第三行的“1 2 3 2 1”还有所有的“0”都会淹没。这次倒水也相当于建设了一部电梯。没有被这次倒水淹没的有倒数第二行的“1”不过它不需要建设电梯。 “洪水填充”用BFS或DFS都行下面的代码用BFS实现。把平面的所有点放进优先队列然后依次取出队列中的最高点并从它开始“洪水填充”。 【重点】 洪水填充。
C代码 代码的计算复杂度设平面上共n个点每个点只需要处理一次优先队列进出一次是O(logn)的所以总复杂度O(nlogn)。
#include bits/stdc.h
using namespace std;
int dx[4] { 1, 0, -1, 0 }; //上下左右
int dy[4] { 0, 1, 0, -1 };
struct Point {int x, y, h; //坐标xy、高度hPoint(int x, int y, int h) { x x; y y; h h; };bool operator(const Point r) const { return (h r.h); }
};
int n, m;
int a[505][505];
bool done[505][505]; //done[x][y]1表示(x,y)已经淹没
void floodfill(int x, int y) { //“洪水填充”平流或往下流done[x][y] true; //标记为淹没for (int i 0; i 4; i) { //扩散周围与它等高或矮的点int nx x dx[i], ny y dy[i];if (nx 0 || nx m || ny 0 || ny n || done[nx][ny]) continue;if (a[nx][ny] a[x][y])floodfill(nx, ny); //继续“洪水填充”}
}
int main() {cin n m;priority_queuePoint Q; //优先队列队首的h最大for (int j 0; j n; j)for (int i 0; i m; i) {cin a[i][j];done[i]j; //0和1标记为已经淹没if(a[i][j] 1)Q.push(Point(i, j, a[i][j])); //把点放进优先队列}int ans 0;while (!Q.empty()) {Point p Q.top(); //每次取出剩下的最高点Q.pop();if (!done[p.x][p.y]) { //如果它没有淹没过就“洪水填充”ans; //这次倒水相当于建设了一部电梯floodfill(p.x, p.y); //“洪水填充”}}cout ans endl;return 0;
}
Java代码
import java.util.;
class Point implements ComparablePoint {int x, y, h;public Point(int x, int y, int h) {x x;y y;h h;}public int compareTo(Point r) { return Integer.compare(-h, -r.h); }
}public class Main {static int[] dx { 1, 0, -1, 0 };static int[] dy { 0, 1, 0, -1 };static int n, m;static int[][] a;static boolean[][] done;public static void floodfill(int x, int y) {done[x][y] true;for (int i 0; i 4; i) {int nx x dx[i], ny y dy[i];if (nx 0 || nx m || ny 0 || ny n || done[nx][ny])continue;if (a[nx][ny] a[x][y])floodfill(nx, ny);}}public static void floodfill_bfs(int sx, int sy) {Queueint[] queue new LinkedList();queue.add(new int[] { sx, sy });done[sx][sy] true;while (!queue.isEmpty()) {int[] curr queue.poll();int x curr[0];int y curr[1];for (int i 0; i 4; i) {int nx x dx[i], ny y dy[i];if (nx 0 nx m ny 0 ny n !done[nx][ny] a[nx][ny] a[x][y]) {queue.add(new int[] { nx, ny });done[nx][ny] true;}}}}public static void main(String[] args) {Scanner input new Scanner(System.in);n input.nextInt();m input.nextInt();a new int[m][n];done new boolean[m][n];PriorityQueuePoint Q new PriorityQueue();for (int j 0; j n; j) {for (int i 0; i m; i) {a[i][j] input.nextInt();done[i]j;if (a[i][j] 1) Q.add(new Point(i, j, a[i][j]));}}int ans 0;while (!Q.isEmpty()) {Point p Q.poll();if (!done[p.x][p.y]) {ans;floodfill_bfs(p.x, p.y);}}System.out.println(ans);input.close();}
}Python代码
from collections import deque
import heapq
import sys
input sys.stdin.readlinedx [1, 0, -1, 0]
dy [0, 1, 0, -1]
n, m map(int, input().split())
a [[0] * n for _ in range(m)]
done [[False] * n for _ in range(m)]Q []
for j in range(n):row_a list(map(int, input().split()))for i in range(m):a[i][j] rowa[i]if a[i][j] 1: done[i][j]Trueelse: heapq.heappush(Q, (-a[i][j], i, j))
ans 0
while Q:, sx, sy heapq.heappop(Q)if not done[sx][sy]:ans 1q deque([(sx, sy)])done[sx][sy] True while q:x, y q.popleft()for i in range(4):nx, ny x dx[i], y dy[i]if 0 nx m and 0 ny n and not done[nx][ny] and a[nx][ny] a[x][y]:q.append((nx, ny))done[nx][ny] True
print(ans)
- 上一篇: 网站设计 app开发宿迁软件开发公司
- 下一篇: 网站设计 成都做网站动态背景的图片
相关文章
-
网站设计 app开发宿迁软件开发公司
网站设计 app开发宿迁软件开发公司
- 技术栈
- 2026年03月21日
-
网站上做公司宣传网站优化的链接建设
网站上做公司宣传网站优化的链接建设
- 技术栈
- 2026年03月21日
-
网站上资源截图怎么做友情链接有用吗
网站上资源截图怎么做友情链接有用吗
- 技术栈
- 2026年03月21日
-
网站设计 成都做网站动态背景的图片
网站设计 成都做网站动态背景的图片
- 技术栈
- 2026年03月21日
-
网站设计 尺寸抚州建站速建网站
网站设计 尺寸抚州建站速建网站
- 技术栈
- 2026年03月21日
-
网站设计 电子购物网站设计信誉好的医疗网站建设
网站设计 电子购物网站设计信誉好的医疗网站建设
- 技术栈
- 2026年03月21日
