当前位置: 首页 > news >正文

2.1.1BFS中的Flood Fill和最短路模型

1.池塘计数

农夫约翰有一片 N ∗ M N∗M NM 的矩形土地。

最近,由于降雨的原因,部分土地被水淹没了。

现在用一个字符矩阵来表示他的土地。

每个单元格内,如果包含雨水,则用”W”表示,如果不含雨水,则用”.”表示。

现在,约翰想知道他的土地中形成了多少片池塘。

每组相连的积水单元格集合可以看作是一片池塘。

每个单元格视为与其上、下、左、右、左上、右上、左下、右下八个邻近单元格相连。

请你输出共有多少片池塘,即矩阵中共有多少片相连的”W”块。

输入格式
第一行包含两个整数 N N N M M M

接下来 N N N行,每行包含 M M M个字符,字符为”W”或”.”,用以表示矩形土地的积水状况,字符之间没有空格。

输出格式
输出一个整数,表示池塘数目。

数据范围
1 ≤ N , M ≤ 1000 1≤N,M≤1000 1N,M1000

输入样例:

10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

输出样例:

3
1.1题解

在这里插入图片描述

在这里插入图片描述
bfs

遍历单元格,同时用一个标记数组记录(标记)每个单元格是否被访问过。

在遍历单元格过程中,如果当前单元格是水,并且没有被访问过,水域数量+1,并且对该单元格进行bfs。

bfs 函数:从当前单元格开始,访问并标记和他同一片水域的单元格。

1.2代码实现
#include<iostream>
#include<algorithm>
#include<cstring>#define x first
#define y secondusing namespace std;//储存下标
typedef pair<int,int> PII;
const int N = 1010,M = N * N;int n,m;
char g[N][N];
PII q[M];
bool st[N][N]; //判重数组void bfs(int sx,int sy)
{//模拟队列int hh = 0,tt = 0;q[0] = {sx,sy};st[sx][sy] = true;while(hh <= tt){PII t = q[hh++];//取出队头//判断8连通,一般使用双重循环for(int i = t.x - 1;i <= t.x + 1;i++)for(int j = t.y - 1;j <= t.y + 1;j++){if(i == t.x && j == t.y)    continue;if(i < 0 || i >= n || j < 0 || j >= m)  continue;if(g[i][j] == '.' || st[i][j])  continue;q[++ tt] = {i,j};st[i][j] = true;}}
}int main()
{scanf("%d%d",&n,&m);for(int i = 0;i < n;i++)    scanf("%s",g[i]);int cnt = 0;for(int i = 0;i < n;i++)    for(int j = 0;j < m;j++)if(g[i][j] == 'W' && !st[i][j]){bfs(i,j);cnt++;}printf("%d",cnt);return 0;
}

2.城堡问题

在这里插入图片描述
图1是一个城堡的地形图。

请你编写一个程序,计算城堡一共有多少房间,最大的房间有多大。

城堡被分割成 m ∗ n m∗n mn个方格区域,每个方格区域可以有 0 4 0~4 0 4面墙。

注意:墙体厚度忽略不计。

输入格式
第一行包含两个整数 m m m n n n,分别表示城堡南北方向的长度和东西方向的长度。

接下来 m m m 行,每行包含 n n n个整数,每个整数都表示平面图对应位置的方块的墙的特征。

每个方块中墙的特征由数字 P P P来描述,我们用 1 1 1表示西墙, 2 2 2表示北墙, 4 4 4表示东墙, 8 8 8表示南墙, P P P为该方块包含墙的数字之和。

例如,如果一个方块的 P P P 3 3 3,则 3 = 1 + 2 3 = 1 + 2 3=1+2,该方块包含西墙和北墙。

城堡的内墙被计算两次,方块 ( 1 , 1 ) (1,1) (1,1)的南墙同时也是方块 ( 2 , 1 ) (2,1) (2,1)的北墙。

输入的数据保证城堡至少有两个房间。

输出格式
共两行,第一行输出房间总数,第二行输出最大房间的面积(方块数)。

数据范围
1 ≤ m , n ≤ 50 , 1≤m,n≤50, 1m,n50,
0 ≤ P ≤ 15 0≤P≤15 0P15
输入样例:

4 7 
11 6 11 6 3 10 6 
7 9 6 13 5 15 5 
1 10 12 7 13 7 5 
13 11 10 8 10 12 13 

输出样例:

5
9
2.1题解

在这里插入图片描述
在这里插入图片描述
不过本题中:
西墙表示:1,北墙表示:2,东墙表示:4,南墙表示:8
可以看出依次是 2 0 , 2 1 , 2 2 , 2 3 2^{0},2^{1},2^{2},2^{3} 20,21,22,23
所以可以用二进制来表示墙的分布情况.
例如: ( 0101 ) 2 (0101)_{2} (0101)2表示南,北边无墙,东,西边有墙

2.2代码实现
#include<iostream>
#include<algorithm>
#include<cstring>#define x first
#define y secondusing namespace std;typedef pair<int,int> PII;const int N = 55,M = N * N;int n,m;
int g[N][N];
PII q[M];
bool st[N][N];int bfs(int sx,int sy)
{//标记一下方向int dx[4] = {0,-1,0,1},dy[4] = {-1,0,1,0};int hh = 0,tt = 0;int area = 0;q[0] = {sx,sy};st[sx][sy] = true;while(hh <= tt){PII t = q[hh++];area++;//遍历四个方向for(int i = 0; i < 4;i++){int a = t.x + dx[i],b = t.y + dy[i];if(a < 0 || a >= n || b < 0 || b >= m)  continue;if(st[a][b])    continue;if(g[t.x][t.y] >> i & 1)    continue;q[++ tt] = {a,b};st[a][b] = true;}}return area;
}int main()
{cin >> n >> m;for(int i = 0;i < n;i++)for(int j = 0;j < m;j++)cin >> g[i][j];int cnt = 0,area = 0;for(int i = 0;i < n;i++)for(int j = 0;j < m;j++)if(!st[i][j]){area = max(area,bfs(i,j));cnt++;}cout << cnt << endl;cout << area << endl;return 0;
}

3.山峰和山谷

FGD小朋友特别喜欢爬山,在爬山的时候他就在研究山峰和山谷。

为了能够对旅程有一个安排,他想知道山峰和山谷的数量。

给定一个地图,为FGD想要旅行的区域,地图被分为 n × n n×n n×n的网格,每个格子 ( i , j ) (i,j) (i,j) 的高度 w ( i , j ) w(i,j) w(i,j)是给定的。

若两个格子有公共顶点,那么它们就是相邻的格子,如与 ( i , j ) (i,j) (i,j)相邻的格子有 ( i − 1 , j − 1 ) , ( i − 1 , j ) , ( i − 1 , j + 1 ) , ( i , j − 1 ) , ( i , j + 1 ) , ( i + 1 , j − 1 ) , ( i + 1 , j ) , ( i + 1 , j + 1 ) (i−1,j−1),(i−1,j),(i−1,j+1),(i,j−1),(i,j+1),(i+1,j−1),(i+1,j),(i+1,j+1) (i1,j1),(i1,j),(i1,j+1),(i,j1),(i,j+1),(i+1,j1),(i+1,j),(i+1,j+1)

我们定义一个格子的集合 S S S为山峰(山谷)当且仅当:

  1. S S S 的所有格子都有相同的高度。
  2. S S S的所有格子都连通。
  3. 对于 s s s属于 S S S,与 s s s相邻的 s ′ s^{'} s不属于 S S S,都有 w s > w s ′ w_{s}>w_{s^{'}} ws>ws(山峰),或者 w s < w s ′ w_{s}<w_{s^{'}} ws<ws(山谷)。
  4. 如果周围不存在相邻区域,则同时将其视为山峰和山谷。

你的任务是,对于给定的地图,求出山峰和山谷的数量,如果所有格子都有相同的高度,那么整个地图即是山峰,又是山谷。

输入格式
第一行包含一个正整数 n n n,表示地图的大小。

接下来一个 n × n n×n n×n 的矩阵,表示地图上每个格子的高度 w w w

输出格式
共一行,包含两个整数,表示山峰和山谷的数量。

数据范围
1 ≤ n ≤ 1000 , 1≤n≤1000, 1n1000,
0 ≤ w ≤ 1 0 9 0≤w≤10^{9} 0w109

输入样例1:

5
8 8 8 7 7
7 7 8 8 7
7 7 7 7 7
7 8 8 7 8
7 8 8 8 8

输出样例1:

2 1

输入样例2:

5
5 7 8 3 1
5 5 7 6 6
6 6 6 2 8
5 7 2 5 8
7 1 0 1 7

输出样例2:

3 3

样例解释
样例1:
1.png

样例2:

2.png
3.1题解

在这里插入图片描述

3.2代码
#include<cstring>
#include<iostream>
#include<algorithm>#define x first
#define y secondusing namespace std;typedef pair<int,int> PII;const int N = 1010,M = N * N;int n;
int h[N][N];
PII q[M];
bool st[N][N];//引用,在此传进去的参数是引用
void bfs(int sx,int sy,bool& has_higher,bool& has_lower)
{int hh = 0,tt = 0;q[0] = {sx,sy};st[sx][sy] = true;while(hh <= tt){PII t = q[hh++];//八连接,使用双重循环for(int i = t.x - 1;i <= t.x + 1;i++)for(int j = t.y - 1;j <= t.y + 1;j++){if(i == t.x && j == t.y) continue;//把中间格子扣掉if(i < 0 || i >= n || j < 0 || j >= n)  continue;if(h[i][j] != h[t.x][t.y])  //山脉的边界{if(h[i][j] > h[t.x][t.y])   has_higher = true;else has_lower = true;}else if(!st[i][j]){q[++ tt] = {i,j};st[i][j] = true;}}}
}
int main()
{scanf("%d",&n);for(int i = 0;i < n;i++)for(int j = 0;j < n;j++)scanf("%d",&h[i][j]);int peak = 0,valley = 0;for(int i = 0;i < n;i++)for(int j = 0;j < n;j++)if(!st[i][j]){bool has_higher = false,has_lower = false;//使用传引用的方式bfs(i,j,has_higher,has_lower);if(!has_higher) peak++;//注意在此不能单纯的使用else,因为有可能即是山峰又是山谷if(!has_lower)  valley++;}printf("%d %d\n",peak,valley);return 0;
}

4.迷宫问题

给定一个 n × n n×n n×n 的二维数组,如下所示:

int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};

它表示一个迷宫,其中的 1 1 1表示墙壁, 0 0 0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

数据保证至少存在一条从左上角走到右下角的路径。

输入格式
第一行包含整数 n n n

接下来 n n n行,每行包含 n n n个整数 0 0 0 1 1 1,表示迷宫。

输出格式
输出从左上角到右下角的最短路线,如果答案不唯一,输出任意一条路径均可。

按顺序,每行输出一个路径中经过的单元格的坐标,左上角坐标为 ( 0 , 0 ) (0,0) (0,0),右下角坐标为 ( n − 1 , n − 1 ) (n−1,n−1) (n1,n1)

数据范围
0 ≤ n ≤ 1000 0≤n≤1000 0n1000
输入样例:

5
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

输出样例:

0 0
1 0
2 0
2 1
2 2
2 3
2 4
3 4
4 4
4.1题解

这道题是844题的扩展 我们这道题是想让我们将最短的路进行输出
我们的做法是用 p r e [ ] [ ] pre[][] pre[][]数组来记录当前结点前驱结点是哪个点以便我们输出它最短路径的坐标点 我们倒着寻找最短路径从 ( n − 1 , n − 1 ) (n-1,n-1) (n1,n1)开始
这样的话更新完 p r e pre pre数组 ( 0 , 0 ) (0,0) (0,0)就有它的前驱结点了 这样就能正着将 p r e pre pre数组中输出对应的路径了
关键和844的不同点就是如何维护 p r e pre pre这个记录路径的数组 以及你如何将这个数组数组也是有学问的

4.2代码
#include<cstring>
#include<algorithm>
#include<iostream>#define x first
#define y secondusing namespace std;typedef pair<int,int> PII;const int N = 1010,M = N * N;int n;
int g[N][N];
PII q[M];
PII pre[N][N];  //记录路径void bfs(int sx,int sy)
{//四个方向,上右下左int dx[4] = {-1,0,1,0},dy[4] = {0,1,0,-1};int hh = 0,tt = 0;q[0] = {sx,sy};memset(pre,-1,sizeof pre);pre[sx][sy] = {0,0};while(hh <= tt){PII t = q[hh ++];for(int i = 0;i < 4;i++){int a = t.x + dx[i],b = t.y + dy[i];if(a < 0 || a >= n || b < 0 || b >= n)  continue;if(g[a][b]) continue;if(pre[a][b].x != -1)   continue;q[++ tt] = {a,b};pre[a][b] = t;}}
}
int main()
{scanf("%d",&n);for(int i = 0;i < n;i++)for(int j = 0;j < n;j++)scanf("%d",&g[i][j]);//反向搜        bfs(n - 1,n - 1);PII end(0,0);while(true){printf("%d %d\n",end.x,end.y);if(end.x == n - 1 && end.y == n - 1)    break;end = pre[end.x][end.y];}return 0;}

5.武士风度的牛

农民 J o h n John John 有很多牛,他想交易其中一头被 D o n Don Don 称为 T h e K n i g h t The Knight TheKnight 的牛。

这头牛有一个独一无二的超能力,在农场里像 K n i g h t Knight Knight 一样地跳(就是我们熟悉的象棋中马的走法)。

虽然这头神奇的牛不能跳到树上和石头上,但是它可以在牧场上随意跳,我们把牧场用一个 x , y x,y xy的坐标图来表示。

这头神奇的牛像其它牛一样喜欢吃草,给你一张地图,上面标注了 T h e K n i g h t The Knight TheKnight 的开始位置,树、灌木、石头以及其它障碍的位置,除此之外还有一捆草。

现在你的任务是,确定 T h e K n i g h t The Knight TheKnight 要想吃到草,至少需要跳多少次。

T h e K n i g h t The Knight TheKnight 的位置用 K 来标记,障碍的位置用 * 来标记,草的位置用 H 来标记。

这里有一个地图的例子:

             11 | . . . . . . . . . .10 | . . . . * . . . . . 9 | . . . . . . . . . . 8 | . . . * . * . . . . 7 | . . . . . . . * . . 6 | . . * . . * . . . H 5 | * . . . . . . . . . 4 | . . . * . . . * . . 3 | . K . . . . . . . . 2 | . . . * . . . . . * 1 | . . * . . . . * . . 0 ----------------------1 0 1 2 3 4 5 6 7 8 9 0 

T h e K n i g h t The Knight TheKnight 可以按照下图中的 A , B , C , D … A,B,C,D… A,B,C,D这条路径用 5 5 5次跳到草的地方(有可能其它路线的长度也是 5 5 5):

             11 | . . . . . . . . . .10 | . . . . * . . . . .9 | . . . . . . . . . .8 | . . . * . * . . . .7 | . . . . . . . * . .6 | . . * . . * . . . F<5 | * . B . . . . . . .4 | . . . * C . . * E .3 | .>A . . . . D . . .2 | . . . * . . . . . *1 | . . * . . . . * . .0 ----------------------10 1 2 3 4 5 6 7 8 9 0

注意: 数据保证一定有解。

输入格式
1 1 1 行: 两个数,表示农场的列数 C C C 和行数 R R R

2.. R + 1 2..R+1 2..R+1行: 每行一个由 C C C 个字符组成的字符串,共同描绘出牧场地图。

输出格式
一个整数,表示跳跃的最小次数。

数据范围
1 ≤ R , C ≤ 150 1≤R,C≤150 1R,C150
输入样例:

10 11
..........
....*.....
..........
...*.*....
.......*..
..*..*...H
*.........
...*...*..
.K........
...*.....*
..*....*..

输出样例:

5
5.1题解

广度优先搜索
一般来说走迷宫,最少步数这种题目,都是广度优先搜索.记住读入上面的有梗,然后修改一下一般走路方式就好了.

5.2代码实现
#include<cstring>
#include<iostream>
#include<algorithm>#define x first
#define y secondusing namespace std;typedef pair<int,int> PII;
const int N = 155,M = N * N;int n,m;
char g[N][N];
PII q[M];
int dist[N][N];//存储最短路int bfs()
{int dx[8] = {-2,-1,1,2,2,1,-1,-2};int dy[8] = {1,2,2,1,-1,-2,-2,-1};int sx,sy;//寻找起点for(int i = 0;i < n;i++)for(int j = 0;j < m;j++)if(g[i][j] == 'K')sx = i,sy = j;int hh = 0,tt = 0;q[0] = {sx,sy};memset(dist,-1,sizeof dist);dist[sx][sy] = 0;while(hh <= tt){auto t = q[hh ++];for(int i = 0;i < 8;i++){int a = t.x + dx[i], b = t.y + dy[i];if(a < 0 || a >= n || b < 0 || b >= m) continue;//不在范围内if(g[a][b] == '*')  continue;//是障碍物if(dist[a][b] != -1)    continue;//不是第一次被访问if(g[a][b] == 'H')  return dist[t.x][t.y] + 1;dist[a][b] = dist[t.x][t.y] + 1;q[++ tt] = {a,b};}}return -1;
}
int main()
{cin >> m >> n;for(int i = 0;i < n;i++)    cin >> g [i];cout << bfs() <<endl;return 0;}

6.抓住那头牛

农夫知道一头牛的位置,想要抓住它。

农夫和牛都位于数轴上,农夫起始位于点 N N N,牛位于点 K K K

农夫有两种移动方式:

  1. X X X移动到 X − 1 X−1 X1 X + 1 X+1 X+1,每次移动花费一分钟
  2. X X X 移动到 2 ∗ X 2∗X 2X,每次移动花费一分钟

假设牛没有意识到农夫的行动,站在原地不动。

农夫最少要花多少时间才能抓住牛?

输入格式
共一行,包含两个整数 N N N K K K

输出格式
输出一个整数,表示抓到牛所花费的最少时间。

数据范围
0 ≤ N , K ≤ 1 0 5 0≤N,K≤10^{5} 0N,K105
输入样例:

5 17

输出样例:

4
5.1题解

看完题目以后,农夫不就是向右移动{-1,1,当前位置}这三种情况吗,
于是就普通至极,至于范围的话,
如果 k = = 1 e 5 , n > 50000 k==1e^{5},n>50000 k==1e5,n>50000时,实际上最短步数一定只有两种情况:

  1. 如果 n − 50000 < k − n n-50000<k-n n50000<kn时,就会后退到 50000 50000 50000 ∗ 2 *2 2
  2. 否则就一直 + 1 +1 +1 k k k

范围就是 0 < = n < = 1 e 5 0<=n<=1e^{5} 0<=n<=1e5

5.2代码
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int N = 1e5 + 10;int n, k;
int q[N];
int dist[N];int bfs()
{memset(dist, -1, sizeof dist);dist[n] = 0;q[0] = n;int hh = 0, tt = 0;while (hh <= tt){int t = q[hh ++ ];if (t == k) return dist[k];if (t + 1 < N && dist[t + 1] == -1){dist[t + 1] = dist[t] + 1;q[ ++ tt] = t + 1;}if (t - 1 >= 0 && dist[t - 1] == -1){dist[t - 1] = dist[t] + 1;q[ ++ tt] = t - 1;}if (t * 2 < N && dist[t * 2] == -1){dist[t * 2] = dist[t] + 1;q[ ++ tt] = t * 2;}}return -1;
}int main()
{cin >> n >> k;cout << bfs() << endl;return 0;
}

相关文章:

2.1.1BFS中的Flood Fill和最短路模型

1.池塘计数 农夫约翰有一片 N ∗ M N∗M N∗M 的矩形土地。 最近&#xff0c;由于降雨的原因&#xff0c;部分土地被水淹没了。 现在用一个字符矩阵来表示他的土地。 每个单元格内&#xff0c;如果包含雨水&#xff0c;则用”W”表示&#xff0c;如果不含雨水&#xff0c;…...

Mysql 新增更新、删除新增、忽略

当主键或唯一键冲突时&#xff0c;Mysql可以进行更新、删除新增、忽略插入等操作。 1.更新 当主键或唯一键冲突时&#xff0c;可以指定更新内容。 INSERT INTO table_name (column_name, column_name, column_name) VALUES (column_value, column_value,column_value) ON DUPL…...

Node-模块系统的用法

题记 node.js模块系统的用法&#xff0c;以下是具体操作过程和代码 为了让Node.js的文件可以相互调用&#xff0c;Node.js提供了一个简单的模块系统。 模块是Node.js 应用程序的基本组成部分&#xff0c;文件和模块是一一对应的。 一个 Node.js 文件就是一个模块&#xff0c;这…...

XSS攻击(1), 测试XSS漏洞, 获取cookie

XSS漏洞, 测试XSS漏洞, 获取cookie 一, 概念: XSS(Cross-Site Scripting), 跨站攻击脚本, XSS漏洞发生在前端, 依赖于浏览器的解析引擎, 让前端执行攻击代码. XSS其实也算注入类的攻击, XSS代码注入需要有JavaScript编程基础. 二, 目的: XSS&#xff08;跨站脚本&#xff0…...

linux任务优先级

这篇笔记记录了linux任务&#xff08;指线程而非进程&#xff09;优先级相关的概念&#xff0c;以及用户态可以用来操作这些优先级的系统调用。 基本概念 调度策略 linux内核中的调度器为任务定义了调度策略&#xff0c;也叫调度类&#xff0c;每个任务同一时刻都有唯一的调…...

JVM内存模型概述

这里主要分为五大块&#xff0c;分别是&#xff1a;本地方法栈、方法区、java堆、程序计数器和java栈。其中重点是方法区、java堆和java栈。 下面就把各个区域的性质总结一下&#xff1a;&#xff08;说明&#xff0c;下面的只是结论&#xff0c;没有详细的对各个内存块进行详细…...

【JavaEE】CAS -- 多线程篇(7)

CAS 1. 什么是 CAS2. CAS 伪代码3. CAS 是怎么实现的4. CAS的应用4.1 实现原子类4.2 实现自旋锁 5. CAS 的 ABA 问题 1. 什么是 CAS CAS: 全称Compare and swap&#xff0c;字面意思:”比较并交换“能够比较和交换 某个寄存器中的值和内存中的值, 看是否相等, 如果相等, 则把另…...

18-spring 事务

文章目录 1. xml和注解配置方式的对象2.spring事务传播特性3. 注解事务的初始化流程4. 创建事务信息流程图5. 事务回滚流程图 1. xml和注解配置方式的对象 2.spring事务传播特性 事务传播行为类型说明PROPAGATION_REQUIRED如果当前没有事务&#xff0c;就新建一个事务&#xf…...

Qt窗体设计的布局

本文介绍Qt窗体的布局。 Qt窗体的布局分为手动布局和自动布局&#xff0c;手动布局即靠手工排布各控件的位置。而自动布局则是根据选择的布局类型自动按此类型排布各控件的位置&#xff0c;使用起来比较方便&#xff0c;本文主要介绍Qt的自动布局。 1.垂直布局 垂直布局就是…...

分布式锁 - 理论篇

一、为什么需要分布式锁 二、分布式锁实现 1.分布式锁演进 - 基本原理 我们可以同时去一个地方“占坑”&#xff0c;如果占到&#xff0c;就执行逻辑。否则就必须等待&#xff0c;直到释放锁。“占坑”可以去redis&#xff0c;可以去数据库&#xff0c;可以去任何大家都能访…...

复杂的菱形继承及菱形虚拟继承(详解)

复杂的菱形继承及菱形虚拟继承 复杂的菱形继承及菱形虚拟继承虚拟继承解决数据冗余和二义性的原理笔试面试题 复杂的菱形继承及菱形虚拟继承 单继承&#xff1a;一个子类只有一个直接父类时称这个继承关系为单继承 多继承&#xff1a;一个子类有两个或以上直接父类时称这个继…...

【快捷测试模型是否可以跑通】设置一张图片的张量形式,送入自己写的模型进行测试

文章目录 1. 1. import torch.nn as nn import torch from einops import rearrange, repeat from einops.layers.torch import Rearrange import torch.nn.functional as Fclass PreNorm(nn.Module):def __init__(self, dim, fn):super().__init__()self.norm nn.LayerNorm(…...

软考系列(系统架构师)- 2019年系统架构师软考案例分析考点

试题一 软件架构&#xff08;架构风格、质量属性&#xff09; 【问题1】&#xff08;13分&#xff09; 针对用户级别与折扣规则管理功能的架构设计问题&#xff0c;李工建议采用面向对象的架构风格&#xff0c;而王工则建议采用基于规则的架构风格。请指出该系统更适合采用哪种…...

安防视频监控系统EasyCVR视频汇聚存储平台定制化开发:新增kafka配置

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、…...

C++设计模式_08_Factory Method工厂方法模式

文章目录 1. “对象创建模式”模式1.1 典型模式 2. 动机&#xff08;Motivation&#xff09;3. 代码演示Factory Method工厂方法模式3.1 常规方法3.2 面向接口的编程3.2.1 FileSplitter1.cpp3.2.2 MainForm1.cpp 3.3 Factory Method工厂方法3.3.1 ISplitterFactory.cpp3.3.2 Ma…...

【TensorFlow1.X】系列学习笔记【基础一】

【TensorFlow1.X】系列学习笔记【基础一】 大量经典论文的算法均采用 TF 1.x 实现, 为了阅读方便, 同时加深对实现细节的理解, 需要 TF 1.x 的知识 文章目录 【TensorFlow1.X】系列学习笔记【基础一】前言线性回归非线性回归逻辑回归总结 前言 本篇博主将用最简洁的代码由浅入…...

Linux 基础操作手记三(内存篇)

Linux 基础操作手记三 释放内存虚拟机彻底无网络测试网速设置虚拟内存交换空间未使用虚拟机设置虚拟内存无法开机问题GParted - 分配内存系统盘扩容自己 释放内存 sync && echo 3 > /proc/sys/vm/drop_caches 虚拟机彻底无网络 还原默认设置&#xff0c;静静的等待…...

NodeJS的初使用,以及引入第三方插件和安装淘宝镜像的教程

NodeJs 命令 npm init -y 生成package.json文件npm i jquery --save–dev 开发依赖(jQuery后面还可以跟模块,可以有多个)npm i jquery --save 生产依赖npm i jquery --D 开发依赖npm uninstall jquery 卸载删除npm i 把删掉的模块,全部重新加载回来 1.介绍 1.什么是NodeJs?…...

Java读取文件的N种方法

1.概述 在这篇文章里&#xff0c; 我们将探索不同的方式从文件中读取数据。 首先&#xff0c; 学习通过标准的的Java类&#xff0c;从classpath、URL或者Jar中加载文件。 然后&#xff0c;学习通用BufferedReader, Scanner, StreamTokenizer, DataInputStream, SequenceInput…...

子类的构造与析构过程

一、简介 父类&#xff0c;也称基类&#xff0c;其构造方法和析构方法不能被继承&#xff1b; 子类&#xff0c;也称派生类&#xff0c;继承父类的方法和属性&#xff0c;但要加入新的构造和析构函数。 二、构造与析构过程 构造&#xff1a;先调用父类——>再调用子类 析构&…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...