【FLOOD FILL专题】【蓝桥杯备考训练】:扫雷、动态网格、走迷宫、画图、山峰和山谷【已更新完成】

目录

1、扫雷(Google Kickstart2014 Round C Problem A)

2、动态网格(Google Kickstart2015 Round D Problem A)

3、走迷宫(模板)

4、画图(第六次CCF计算机软件能力认证)

5、山峰和山谷(POI2007 & 《信息学奥赛一本通》)


1、扫雷(Google Kickstart2014 Round C Problem A)

扫雷是一种计算机游戏,在 20 世纪 80 年代开始流行,并且仍然包含在某些版本的 Microsoft Windows 操作系统中。

在这个问题中,你正在一个矩形网格上玩扫雷游戏。

最初网格内的所有单元格都呈未打开状态。

其中 M 个不同的单元格中隐藏着 M 个地雷。

其他单元格内不包含地雷。

你可以单击任何单元格将其打开。

如果你点击到的单元格中包含一个地雷,那么游戏就会判定失败。

如果你点击到的单元格内不含地雷,则单元格内将显示一个 0 到 8 之间的数字(包括 0 和 8),这对应于该单元格的所有相邻单元格中包含地雷的单元格的数量。

如果两个单元格共享一个角或边,则它们是相邻单元格。

另外,如果某个单元格被打开时显示数字 0,那么它的所有相邻单元格也会以递归方式自动打开。

当所有不含地雷的单元格都被打开时,游戏就会判定胜利。

例如,网格的初始状态可能如下所示(* 表示地雷,而 c 表示第一个点击的单元格):

*..*...**.
....*.....
..c..*....
........*.
..........

被点击的单元格旁边没有地雷,因此当它被打开时显示数字 00,并且它的 88 个相邻单元也被自动打开,此过程不断继续,最终状态如下:

*..*...**.
1112*.....
00012*....
00001111*.
00000001..

此时,仍有不包含地雷的单元格(用 . 字符表示)未被打开,因此玩家必须继续点击未打开的单元格,使游戏继续进行。

你想尽快赢得游戏胜利并希望找到赢得游戏的最低点击次数。

给定网格的尺寸(N×N),输出能够获胜的最小点击次数。

输入格式

第一行包含整数 T,表示共有 T 组测试数据。

每组数据第一行包含整数 N,表示游戏网格的尺寸大小。

接下来 N 行,每行包含一个长度为 N 的字符串,字符串由 .(无雷)和 *(有雷)构成,表示游戏网格的初始状态。

输出格式

每组数据输出一个结果,每个结果占一行。

结果表示为 Case #x: y,其中 x 是组别编号(从 1 开始),y 是获胜所需的最小点击次数。

数据范围

1≤T≤100
1≤N≤300

输入样例:
2
3
..*
..*
**.
5
..*..
..*..
.*..*
.*...
.*...
输出样例:
Case #1: 2
Case #2: 8
思路:

预处出每个点的数字再对0的位置进行搜索,最后对漏网之鱼进行处理

代码:
#include<bits/stdc++.h>
using namespace std;
const int N =310;
int dx[8]={1,1,1,0,0,-1,-1,-1},dy[8]={1,0,-1,1,-1,1,0,-1};
int num[N][N],st[N][N];
char g[N][N];    //记录扫雷整张地图
void bfs(int a,int b,int n)   //寻找0点周围的所有点,标记为已遍历
{st[a][b]=1;num[a][b]=-1;for(int i=0;i<8;i++){int x=a+dx[i],y=b+dy[i];if(x>=0 && x<n && y>=0 && y<n){if(!st[x][y] && num[x][y]!=-1){if(num[x][y]>0) st[x][y]=1,num[x][y]=-1;if(num[x][y]==0) bfs(x,y,n);}}}
}
int main()
{int T,n;scanf("%d",&T);for(int t=1;t<=T;t++){scanf("%d",&n);for(int i=0;i<n;i++)scanf("%s",g[i]);memset(num,0,sizeof num);for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(g[i][j]!='*')    //不是雷的要统计8个点上雷的总个数{for(int k=0;k<8;k++){int x=i+dx[k],y=j+dy[k];if(x>=0 && x<n && y>=0 && y<n && g[x][y]=='*'){num[i][j]++;}}}else num[i][j]=-1;   //如果是雷则标记为-1}}memset(st,0,sizeof st);int ans=0;for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(num[i][j]==0 && !st[i][j])     //找到一个0点ans++,同时进行bfs{ans++;  bfs(i,j,n);}}}for(int i=0;i<n;i++){for(int j=0;j<n;j++)if(num[i][j]!=-1 && !st[i][j]) ans++;  //找到漏网之鱼,每找到一个就ans++}printf("Case #%d: %d\n",t,ans);}return 0;
}

2、动态网格(Google Kickstart2015 Round D Problem A)

我们有一个 R 行 C 列的矩形网格,其中每个方格内的数字都是 0 或 1。

我们将在网格上执行 N 个操作,每个操作都是以下之一:

  • 操作 M:将网格的一个单元格中的数字更改为 0 或 1。
  • 操作 Q:确定 1 的不同连通区域的数量。 1 的连通区域是指矩阵内全部为 1 的连通的单元格的子集,在子集区域内通过沿着共享边缘在单元格之间行进,可以从该区域中的任何单元格到达该区域中的任何其他单元格。
输入格式

第一行包含整数 T,表示共有 T 组测试数据。

每组数据第一行包含两个整数 R 和 C,表示矩形网格的行数和列数。

接下来 R 行,每行包含一个长度为 C 的由 1 和 0 构成的字符串,表示矩阵网格的初始状态。

接下来一行,包含整数 N,表示操作数量。

接下来 N 行,每行包含一个操作指令,操作指令共两种,如下所示:

  • M x y z,表示 M 指令,具体含义为将第 x 行第 y 列的方格内的值变为 z。
  • Q,表示 Q 指令,表示进行一次询问。
输出格式

对于每组测试数据,第一行输出 Case #x:,其中 x 为组别编号(从 1 开始)。

接下来 Q 行,每行输出一个询问的结果。

数据范围

1≤T≤10
1≤R,C≤100
0≤x<R
0≤y<C
0≤z≤1
1≤N≤1000

输入样例:
1
4 4
0101
0010
0100
1111
7
Q
M 0 2 1
Q
M 2 2 0
Q
M 2 1 0
Q
输出样例:
Case #1:
4
2
2
2
思路:

比较简单的连通块的统计,只是加上了些许操作而已

代码:
#include<bits/stdc++.h>using namespace std;const int N=1001;int g[N][N];
int st[N][N];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};int t;
int n,m;
int q;void bfs(int x,int y)
{st[x][y]=1;for(int i=0;i<4;i++){int nx=x+dx[i];int ny=y+dy[i];if(nx>=0 && ny>=0 && nx<n && ny<m && !st[nx][ny] && g[nx][ny]==1){bfs(nx,ny);}}}int main()
{cin>>t;int cnt=1;while(t--){cin>>n>>m;for(int i=0;i<n;i++){string s;cin>>s;//cout<<s<<endl;for(int j=0;j<m;j++){			g[i][j]=s[j]-'0';//cout<<s;}}/*for(int i=0;i<n;i++){for(int j=0;j<m;j++){			cout<<g[i][j];}cout<<endl;}*///cout<<"read";cin>>q;cout<<"Case #"<<cnt<<":"<<endl;cnt++;while(q--){char op;cin>>op;if(op=='Q'){//printf("Case #%d:",&cnt);memset(st,0,sizeof st);int res=0;for(int i=0;i<n;i++)for(int j=0;j<m;j++){if(g[i][j]==1 && !st[i][j]){//cout<<"ko"<<endl;bfs(i,j);res++;}}cout<<res<<endl;}else{int x,y,v;cin>>x>>y>>v;g[x][y]=v;}}}return 0;
}

3、走迷宫(模板)

给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。

最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。

请问,该人从左上角移动至右下角 (n,m)处,至少需要移动多少次。

数据保证 (1,1) 处和 (n,m)处的数字为 0,且一定至少存在一条通路。

输入格式

第一行包含两个整数 n 和 m。

接下来 n 行,每行包含 m 个整数(0 或 1),表示完整的二维数组迷宫。

输出格式

输出一个整数,表示从左上角移动至右下角的最少移动次数。

数据范围

1≤n,m≤100

输入样例:
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
输出样例:
8
思路:

深搜加距离记录(距离数组d同时作为st数组用)一遍过

代码:
#include<bits/stdc++.h>using namespace std;const int N=101;typedef pair<int,int> PII;int n,m;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
int g[N][N];
int d[N][N];
int hh,tt;
PII q[N*N];int bfs()
{q[tt]={0,0};d[0][0]=0;while(hh<=tt){auto t=q[hh++];int x=t.first;int y=t.second;for(int i=0;i<4;i++){int nx=x+dx[i];int ny=y+dy[i];if(nx>=0 && nx<n && ny>=0 && ny<m && d[nx][ny]==-1 &&g[nx][ny]==0){d[nx][ny]=d[x][y]+1;//cout<<d[nx][ny]<<endl;q[++tt]={nx,ny};}}}return d[n-1][m-1];}int main()
{cin>>n>>m;memset(d,-1,sizeof d);for(int i=0;i<n;i++)for(int j=0;j<m;j++){scanf("%d",&g[i][j]);}cout<<bfs();return 0;
}

4、画图(第六次CCF计算机软件能力认证)

用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ASCII Art 的艺术。

例如,下图是用 ASCII 字符画出来的 CSPRO 字样。

  ..____.____..____..____...___.../.___/.___||.._.\|.._.\./._.\.|.|...\___.\|.|_).|.|_).|.|.|.||.|___.___).|..__/|.._.<|.|_|.|.\____|____/|_|...|_|.\_\\___/.

本题要求编程实现一个用 ASCII 字符来画图的程序,支持以下两种操作:

  • 画线:给出两个端点的坐标,画一条连接这两个端点的线段。简便起见题目保证要画的每条线段都是水平或者竖直的。水平线段用字符 - 来画,竖直线段用字符 | 来画。如果一条水平线段和一条竖直线段在某个位置相交,则相交位置用字符 + 代替。
  • 填充:给出填充的起始位置坐标和需要填充的字符,从起始位置开始,用该字符填充相邻位置,直到遇到画布边缘或已经画好的线段。注意这里的相邻位置只需要考虑上下左右 4 个方向,如下图所示,字符 @ 只和 4 个字符 * 相邻。
  .*.*@*.*.
输入格式

第 1 行有三个整数 m,n 和 q。m 和 n分别表示画布的宽度和高度,以字符为单位。q 表示画图操作的个数。

第 2 行至第 q+1 行,每行是以下两种形式之一:

  • 0 x1 y1 x2 y2:表示画线段的操作,(x1,y1)和 (x2,y2)分别是线段的两端,满足要么 x1=x2 且 y1≠y2,要么 y1=y2 且 x1≠x2。
  • 1 x y c:表示填充操作,(x,y) 是起始位置,保证不会落在任何已有的线段上;c 为填充字符,是大小写字母。

画布的左下角是坐标为 (0,0) 的位置,向右为 x 坐标增大的方向,向上为 y 坐标增大的方向。

这 q 个操作按照数据给出的顺序依次执行。画布最初时所有位置都是字符 .(小数点)。

输出格式

输出有 n 行,每行 m 个字符,表示依次执行这 q 个操作后得到的画图结果。

数据范围

2≤m,n≤100
0≤q≤100,
0≤x<m(x 表示输入数据中所有位置的 x 坐标),
0≤y<n(y 表示输入数据中所有位置的 y 坐标)。

输入样例1:
4 2 3
1 0 0 B
0 1 0 2 0
1 0 0 A
输出样例1:
AAAA
A--A
输入样例2:
16 13 9
0 3 1 12 1
0 12 1 12 3
0 12 3 6 3
0 6 3 6 9
0 6 9 12 9
0 12 9 12 11
0 12 11 3 11
0 3 11 3 1
1 4 2 C
输出样例2:
................
...+--------+...
...|CCCCCCCC|...
...|CC+-----+...
...|CC|.........
...|CC|.........
...|CC|.........
...|CC|.........
...|CC|.........
...|CC+-----+...
...|CCCCCCCC|...
...+--------+...
................
思路:

我们选择反着读入行列的信息,这样就可以把起点定义为我们熟悉的左上角

洪水覆盖法在这里体现在对封闭图形的填充

代码:
//注意这里的输入是先输入的是列,然后是行
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int n, m ,q;char g[N][N];
bool st[N][N];void change(int x1, int y1, int x2, int y2){if(x1 == x2){// 同一行for(int i = y1; i <= y2; i ++){if( g[x1][i] == '|'|| g[x1][i] == '+') g[x1][i]= '+';else g[x1][i] = '-';}}// 同一列else if ( y1 == y2){for(int i = x1; i <= x2; i ++){if( g[i][y1] == '-' || g[i][y1] == '+') g[i][y1] = '+';else g[i][y1] = '|';}}
}void paint(int x, int y, char s){st[x][y] = true;g[x][y] = s;int dx[4] = { -1, 0, 1, 0}, dy[4] = { 0, 1, 0, -1};for(int i = 0; i < 4; i ++){int a = x + dx[i], b = y + dy[i];if(a < 0 || a >= n || b < 0 || b >= m || st[a][b]) continue;if(g[a][b] == '|' || g[a][b] == '-' || g[a][b] == '+') continue;paint(a, b, s);}
}
int main(){cin >> m >> n >> q;for(int i = 0; i < n; i ++)for(int j = 0; j < m; j ++)g[i][j] = '.';while(q --){int op;cin >> op;if(op == 0){// x和y反着读入int x1, y1, x2, y2;cin >> y1 >> x1 >> y2 >> x2;if(x1 > x2) swap(x1, x2);if(y1 > y2) swap(y1, y2);change(x1, y1, x2, y2);}else{int x, y;char s;// x和y反着读入cin >> y >> x >> s;memset(st, 0, sizeof st);paint(x, y, s);}}for(int i = n -1; i >= 0; i--){for(int j = 0; j < m; j++)cout << g[i][j];cout << endl;}
}

5、山峰和山谷(POI2007 & 《信息学奥赛一本通》)

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

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

给定一个地图,为FGD想要旅行的区域,地图被分为 n×n 的网格,每个格子 (i,j) 的高度 w(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)。

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

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

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

输入格式

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

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

输出格式

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

数据范围

1≤n≤1000
0≤w≤109

输入样例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

思路:

加两个参数表示有无山峰或者山谷即可,遇到相同的数字就继续bfs,记得bool参数加引用,不然不会改变原来的变量

dfs代码 (超出内存版):

bfs(爆栈)

//dfs超出内存了 
#include<bits/stdc++.h>using namespace std; const int N=1000;int g[N][N];int st[N][N];int dx[]={-1,1,0,0,1,1,-1,-1};
int dy[]={0,0,-1,1,1,-1,-1,1};//八个方向(新增左上左下右上右下)
int n;void dfs(int x,int y,bool &h,bool &l)//这里必须引用!
{st[x][y]=1;for(int i=0;i<8;i++){int nx=x+dx[i];int ny=y+dy[i];if(nx>=0 && ny>=0 && nx<n && ny<n){if(g[nx][ny]<g[x][y])l=true;//有比他更低的else if(g[nx][ny]>g[x][y])h=true;//有比他更高的else if(g[nx][ny]==g[x][y]  && !st[nx][ny]){dfs(nx,ny,h,l);}}}}int main()
{cin>>n;int peak=0,valley=0;for(int i=0;i<n;i++)for(int j=0;j<n;j++){scanf("%d",&g[i][j]);	}	for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(!st[i][j]){bool h=false;bool l=false;dfs(i,j,h,l);if(!h)peak++;//cout<<i<<""<<j<<endl;if(!l)valley++;//cout<<i<<""<<j<<endl;}}cout<<peak<<" "<<valley;return 0;
}
bfs代码 (AC成功): 
#include <iostream>
#include <queue>
#define x first
#define y second
using namespace std;
typedef pair <int,int> PII;
const int N = 1010;
int n;
int h[N][N];
bool st[N][N];
void bfs (int sx,int sy,bool &has_higher,bool &has_lower) {queue <PII> q;q.push ({sx,sy});while (!q.empty ()) {PII t = q.front ();q.pop ();for (int i = t.x - 1;i <= t.x + 1;i++) {for (int j = t.y - 1;j <= t.y + 1;j++) {if (i < 1 || i > n || j < 1 || 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.push ({i,j});st[i][j] = true;}}}}
}
int main () {cin >> n;for (int i = 1;i <= n;i++) {for (int j = 1;j <= n;j++) cin >> h[i][j];}int peak = 0,valley = 0;for (int i = 1;i <= n;i++) {for (int j = 1;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++;if (!has_lower) valley++;}}}cout << peak << ' ' << valley << endl;return 0;
}
dfs代码 (AC成功版):
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 1010;int n;
bool f[N][N];
int h[N][N];
// 将两个需要返回的参数,设置为全局变量,则可以正常通过此题。
//  将两个需要返回的参数,设置为带地址符的变量,则MLE
bool has_higher, has_lower;
//  657 ms
void dfs(int sx, int sy) {f[sx][sy] = true;for (int x = sx - 1; x <= sx + 1; x++) {for (int y = sy - 1; y <= sy + 1; y++) {if (x < 0 || x >= n || y < 0 || y >= n) continue;if (h[sx][sy] != h[x][y]) { //高度不相等if (h[sx][sy] < h[x][y]) has_higher = true;if (h[sx][sy] > h[x][y]) has_lower = true;} else { //高度相等if (f[x][y]) continue;dfs(x, y);}}}
}
int vally, peak;
int main() {//加快读入cin.tie(0), ios::sync_with_stdio(false);cin >> n;for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)cin >> h[i][j];for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (!f[i][j]) {has_higher = has_lower = false;dfs(i, j);if (has_higher && has_lower) continue;if (has_higher) vally++;if (has_lower) peak++;}}}//对于不存在山峰+山谷的一马平地,山峰山谷都输出1if (peak == 0 && vally == 0) peak = 1, vally = 1;printf("%d %d\n", peak, vally);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/762203.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(四)—— 过拟合和欠拟合

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 通过增加容量或提前停止来提高性能。 在深度学习中&#…

C#对于文件中的文件名判断问题

C#中对于文件名的判断问题&#xff0c;我们使用bool值进行值的传递&#xff0c;首先我们使用内置方法进行文件字符串匹配的bool值回传&#xff0c;我们打印出文件名以及相对应的bool&#xff0c;即可知道文件名是否真正生效 bool isHave fileName.Contains("Hello"…

代码学习记录22--回溯算法第三天

随想录日记part22 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.17 主要内容&#xff1a;今天主要是结合类型的题目加深对回溯算法的理解&#xff1a;1.组合总和;2.组合总和 ;3.分割回文串。 39. 组合总和 40.组合总和II131.分割回文串 Topic1组合总和 题…

【Node.js从基础到高级运用】十四、Node.js 错误处理与日志记录

引言 在这篇博客文章中&#xff0c;我们将深入探讨Node.js中的错误处理和日志记录的最佳实践。我们会了解如何在Node.js应用程序中有效地捕获和处理错误&#xff0c;并利用日志库如morgan来记录应用程序的活动和错误信息。 第1部分&#xff1a;Node.js中的错误处理 同步代码中…

Spring AI Embeddings 和 Vector 入门

在前面 Spring AI Chat 简单示例 中介绍了 Chat 的基本用法&#xff0c;本文在此基础&#xff08;主要是pom.xml&#xff09;上继续探索 Embedding 和 Vector。 官方文档&#xff1a; embeddings: https://docs.spring.io/spring-ai/reference/api/embeddings/openai-embedding…

断点重训教程:如何有效地保护深度学习模型训练进度

在深度学习领域&#xff0c;长时间训练是常见的需求&#xff0c;然而&#xff0c;在训练过程中可能会面临各种意外情况&#xff0c;比如计算机故障、断电等&#xff0c;这些意外情况可能导致训练过程中断&#xff0c;造成已经投入的时间和资源的浪费。为了应对这种情况&#xf…

Avue框架实现图表的基本知识 | 附Demo(全)

目录 前言1. 柱状图2. 折线图3. 饼图4. 刻度盘6. 仪表盘7. 象形图8. 彩蛋8.1 饼图8.2 柱状图8.3 折线图8.4 温度仪表盘8.5 进度条 前言 以下Demo&#xff0c;作为初学者来说&#xff0c;会相应给出一些代码注释&#xff0c;可相应选择你所想要的款式 对于以下Demo&#xff0c…

GStreamer简单看看

主要是现在弄摄像头&#xff0c;要用到这东西。所以学学。 最权威主页&#xff1a;GStreamer: open source multimedia framework 大概看了下&#xff0c;好像命令也不难。 gst-launch-1.0 v4l2src device/dev/video0 ! video/x-raw,formatYUY2,width640,height480,framerat…

说说你对webpack的理解?解决了什么问题?

文章目录 一、背景二、问题三、是什么参考文献 一、背景 Webpack 最初的目标是实现前端项目的模块化&#xff0c;旨在更高效地管理和维护项目中的每一个资源 模块化 最早的时候&#xff0c;我们会通过文件划分的形式实现模块化&#xff0c;也就是将每个功能及其相关状态数据各…

Batch Normalization(批量归一化)和 Layer Normalization(层归一化)

Batch Normalization(批量归一化)和 Layer Normalization(层归一化)都是深度学习中用于改善网络训练过程的归一化技术。尽管它们的目标相似,即通过规范化中间层的激活值来加速训练过程并提高性能,但它们在细节上有所不同。 Batch Normalization (批量归一化) Batch Nor…

谷歌地图TMS地图服务地址收集2024,测试可用

对于普通的开发者或者GIS从业者来说&#xff0c;免费的底图影像服务&#xff0c;太重要了。之前写过一篇谷歌地图的TMS地址收集的博文&#xff0c;由于谷歌网站关闭已经不能用。最近又发现了谷歌在国内开放了其他地址&#xff0c;在这里给大家分享一下。 https://gac-geo.googl…

Ant Design Vue和VUE3下的upload组件使用以及文件预览

Ant Design Vue和VUE3下的upload组件使用以及文件预览 文章目录 Ant Design Vue和VUE3下的upload组件使用以及文件预览一、多文件上传1.需求2.样例3.代码 二、单文件上传1. 需求2. 样例3.代码 二、多文件上传产生的时间超时问题三、文件系统名称更改1. 修改文件index.html2. 修…

Leetcode热题100:图论

Leetcode 200. 岛屿数量 深度优先搜索法&#xff1a; 对于这道题来说&#xff0c;是一个非常经典的图的问题&#xff0c;我们可以先从宏观上面来看问题&#xff0c;也就是说在不想具体算法的前提下&#xff0c;简单的说出如何找到所有的岛屿呢&#xff1f; 如图中所示&#x…

oracle 19c单机版本补丁升级

文章目录 一、补丁包概述二、备份opatch三、替换高版本opatch四、打DB补丁1、关闭数据库2、关闭监听3、解压补丁4、冲突检测5、补丁空间检查6、执行补丁升级7、将更新内容加载到数据库8、最后查看数据库版本9、卸载补丁包 一、补丁包概述 补丁升级包 链接&#xff1a;https://…

【系统架构设计师】计算机系统基础知识 03

系统架构设计师 - 系列文章目录 01 系统工程与信息系统基础 02 软件架构设计 03 计算机系统基础知识 文章目录 系统架构设计师 - 系列文章目录 文章目录 前言 一、计算机系统概述 1.计算机组成 ​编辑2.存储系统 二、操作系统 ★★★★ 1.进程管理 2.存储管理 1.页式存储 …

Golang Gorm 自动分批查询

场景&#xff1a; 目标查询全量数据&#xff0c;但需要每次Limit分批查询&#xff0c;保护数据库 文档&#xff1a; https://gorm.io/zh_CN/docs/advanced_query.html // Param: // dest 目标地址 // batchSize 大小 // fc 处理函数func (db *DB) FindInBatc…

安卓 Android Activity 生命周期

文章目录 Intro生命周期方法 & 执行顺序结论code Intro 本文提供一个测试类通过打印的方式展示在多个Activity之间互相跳转的时候&#xff0c;各个Activity的生命周期相关方法的执行顺序。 生命周期方法 & 执行顺序结论 下图出自 郭霖 《第一行代码&#xff08;第二…

电网的正序参数和等值电路(一)

本篇为本科课程《电力系统稳分析》的笔记。 本篇为第二章的第一篇笔记。 电力系统正常运行中&#xff0c;可以认为系统的三相结构和三相负荷完全对称。而对称三相的计算可以用一相来完成&#xff0c;其中所有给出的标称电压都是线电压的有效值&#xff0c;假定系统全部是Y-Y型…

【网站项目】291校园疫情防控系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

The 2023 Guangdong Provincial Collegiate Programming Contest

I. Path Planning 嗯&#xff0c;怎么说呢&#xff0c;一般二维图&#xff0c;数据不是很大的比如n*m*log级别允许的&#xff0c;如果一眼不是bfs&#xff0c;可以考虑结合一下二分 本题可知&#xff0c;只能向下或者向右&#xff0c;那么我们就像如果答案为x&#xff0c;那么…