图论之dfs与bfs的练习
dfs--深度优选搜索
bfs--广度优先搜索
迷宫问题--dfs
问题:
给定一个n*m的二维迷宫数组其中S是起点,T是终点,*是墙壁(无法通过), .是道路
问从起点S出发沿着上下左右四个方向走,能否走到T点?能输出"YES",否则输出"NO"。
8 8
*****...
*.S...**
*****.**
*****..*
*T..**.*
.**.**.*
..*....*
...*****
#include<iostream>
using namespace std;
const int N = 1e4 + 10;
char g[N][N];//迷宫数组
bool vis[N][N];//二维标记数组
//方向数组
int dx[] = { 0,0,-1,1 };
int dy[] = { 1,-1,0,0 };
int n, m;
int sx, sy, tx, ty;
bool flag;
void dfs(int px, int py) {//如果当前搜的点p是终点点t,终止搜索if (px == tx && py == ty) {flag = true;return;}//沿着点p的邻接点继续搜索for (int i = 0; i < 4; i++) {int bx=px+dx[i], by=py+dy[i];//生成邻接点if (bx<1 || bx>n || by<1 || by>m) continue;//迷宫图的边界if (g[bx][by] == '*') continue;//墙壁if (vis[bx][by]) continue;//走过的不再走vis[bx][by] = 1;dfs(bx, by);}
}
int main() {cin >> n >> m;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> g[i][j];if (g[i][j] == 'S') sx = i, sy = j;//找到起点的坐标if (g[i][j] == 'T') tx = i, ty = j;//找到终点的坐标}}vis[sx][sy] = 1;flag = false;dfs(sx, sy);if (flag) cout << "YES" << endl;else cout << "NO" << endl;return 0;
}
求迷宫问题的最短路--bfs
问题:
给定一个n*m的二维迷宫数组其中S是起点,T是终点,*是墙壁(无法通过), .是道路
问从起点S出发沿着上下左右四个方向走,能否走到T点?如果能打印最短路径长度,否则输出0。
8 8
*****...
*.S...**
*****.**
*****..*
*T..**.*
.**.**.*
..*....*
...*****
#include<iostream>
#include<queue>
using namespace std;
const int N = 1e4 + 10;
char g[N][N];//迷宫数组
bool vis[N][N];//二维标记数组
//方向数组
int dx[] = { 0,0,-1,1 };
int dy[] = { 1,-1,0,0 };
int n, m;
int sx, sy, tx, ty;
struct point {int x, y, depth;
};
void bfs(point s) {queue<point> q;q.push(s); vis[s.x][s.y] = 1;while (!q.empty()) {point cur = q.front(); q.pop();if (cur.x == tx && cur.y == ty) {flag = true;cout << cur.depth - 1 << endl;return;}//通过方向数组找到cur的邻接点,沿着邻接点继续广搜for (int i = 0; i < 4; i++) {int bx = cur.x + dx[i], by = cur.y + dy[i];//生成邻接点if (bx<1 || bx>n || by<1 || by>m) continue;if (g[bx][by] == '*') continue;if (vis[bx][by]) continue;vis[bx][by] = 1;q.push({ bx,by,cur.depth + 1 });}}
}
int main() {cin >> n >> m;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> g[i][j];if (g[i][j] == 'S') sx = i, sy = j;if (g[i][j] == 'T') tx = i, ty = j;}}vis[sx][sy] = 1;flag = false;bfs({ sx, sy ,1});return 0;
}
1215:迷宫
信息学奥赛一本通(C++版)在线评测系统
【题目描述】
一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n×n�×�的格点组成,每个格点只有22种状态,
.
和#
,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#
),则看成无法办到。【输入】
第1行是测试数据的组数k�,后面跟着k�组输入。每组测试数据的第11行是一个正整数n(1≤n≤100)�(1≤�≤100),表示迷宫的规模是n×n�×�的。接下来是一个n×n�×�的矩阵,矩阵中的元素为
.
或者#
。再接下来一行是44个整数ha,la,hb,lbℎ�,��,ℎ�,��,描述A处在第haℎ�行, 第la��列,B处在第hbℎ�行, 第lb��列。注意到ha,la,hb,lbℎ�,��,ℎ�,��全部是从00开始计数的。【输出】
k�行,每行输出对应一个输入。能办到则输出“YES”,否则输出“NO”。
【输入样例】
2 3 .## ..# #.. 0 0 2 2 5 ..... ###.# ..#.. ###.. ...#. 0 0 4 0
【输出样例】
YES NO
解法一:dfs
#include<iostream>
using namespace std;
const int N = 1e2 + 10;
char g[N][N];//迷宫数组
bool vis[N][N];//标记数组
int t,n, sx, sy, tx, ty;
//方向数组
int dx[] = { 0,0,1,-1 };
int dy[] = { 1,-1,0,0 };
bool flag;
void dfs(int px, int py) {if (px == tx && py == ty) {flag = true;return;}//沿着邻接点继续搜索for (int i = 0; i < 4; i++) {int bx = px + dx[i], by = py + dy[i];if (bx<1 || bx>n || by<1 || by>n) continue;if (g[bx][by] == '#') continue;if (vis[bx][by]) continue;//如果以上情况均不成立,证明邻接点有效,沿着该邻接点继续深搜vis[bx][by] = 1;//不标记会报栈溢出错误dfs(bx, by);}
}
int main() {cin >> t;while (t--) {cin >> n;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)cin >> g[i][j]; cin >> sx >> sy >> tx >> ty;sx++, sy++, tx++, ty++;//注意:本题下标从0开始//多组数据要将相关状态重置flag = false;memset(vis, 0, sizeof vis);//将vis数组全体清0vis[sx][sy] = 1;dfs(sx, sy);if (flag) cout << "YES" << endl;else cout << "NO" << endl;}return 0;
}
解法二:bfs
#include<iostream>
#include<queue>
using namespace std;
const int N = 1e2 + 10;
char g[N][N];//迷宫数组
bool vis[N][N];//标记数组
int t, n, sx, sy, tx, ty;
//方向数组
int dx[] = { 0,0,1,-1 };
int dy[] = { 1,-1,0,0 };
bool flag;
struct point {int x, y;
};
void bfs(point p) {queue<point> q;q.push(p); vis[p.x][p.y] = 1;while (!q.empty()) {point cur=q.front(); q.pop();if (cur.x == tx && cur.y== ty) {flag = true;return;}//沿着邻接点继续搜索for (int i = 0; i < 4; i++) {int bx = cur.x + dx[i], by = cur.y + dy[i];if (bx<1 || bx>n || by<1 || by>n) continue;if (g[bx][by] == '#') continue;if (vis[bx][by]) continue;//如果以上情况均不成立,证明邻接点有效,沿着该邻接点继续深搜vis[bx][by] = 1;q.push({ bx,by });}}
}
int main() {cin >> t;while (t--) {cin >> n;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)cin >> g[i][j]; /*scanf(" %c", &g[i][j]); */cin >> sx >> sy >> tx >> ty;sx++, sy++, tx++, ty++;//注意本题下标从0开始//多组数据要将相关状态重置flag = false;memset(vis, 0, sizeof vis);//将vis数组全体清0vis[sx][sy] = 1;bfs({sx, sy});if (flag) cout << "YES" << endl;else cout << "NO" << endl;}return 0;
}
1216:红与黑
【题目描述】
有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。
【输入】
包括多组数据。每组数据的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过20。在接下来的H行中,每行包括W个字符。每个字符表示一块瓷砖的颜色,规则如下:
1)‘.’:黑色的瓷砖;
2)‘#’:红色的瓷砖;
3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每组数据中唯一出现一次。
当在一行中读入的是两个零时,表示输入结束。
【输出】
对每组数据,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。
【输入样例】
6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 0 0
【输出样例】
45
解法一:dfs
#include<iostream>
using namespace std;
const int N = 1e2 + 10;
char g[N][N];//迷宫数组
bool vis[N][N];//二维标记数组
//方向数组
int dx[] = { 0,0,-1,1 };
int dy[] = { 1,-1,0,0 };
int sx, sy;
int w, h;
int cnt;
void dfs(int px,int py)
{//沿着邻接点搜索for (int i = 0; i < 4; i++){int bx = px + dx[i], by = py + dy[i];if (g[bx][by] == '#')continue;if (bx<1 || bx>w || by<1 || by>h)continue;if (vis[bx][by])continue;vis[bx][by] = 1;cnt++;dfs(bx, by);}
}int main()
{/*注意:本题是先输入列再输入行*/while (cin >> h >> w && w && h)//注意要判断w和h都为0结束{for (int i = 1; i <= w; i++){for (int j = 1; j <= h; j++){cin >> g[i][j];if (g[i][j] == '@')sx = i, sy = j;}}//多组数据注意相关状态cnt = 1;memset(vis, 0, sizeof vis);//vis数组全体清0vis[sx][sy] = 1;dfs(sx, sy);cout << cnt << endl;}return 0;
}
解法二:bfs
#include<iostream>
#include<queue>
using namespace std;
const int N = 1e2 + 10;
char g[N][N];//迷宫数组
bool vis[N][N];//二维标记数组
//方向数组
int dx[] = { 0,0,-1,1 };
int dy[] = { 1,-1,0,0 };
int sx, sy;
int w, h;
int cnt;
struct point
{int x, y;
};
void dfs(point s)
{queue<point>q;q.push(s); vis[s.x][s.y] = 1;while (!q.empty()) {point cur = q.front(); q.pop();//沿着邻接点搜索for (int i = 0; i < 4; i++){int bx = cur.x + dx[i], by = cur.y + dy[i];if (g[bx][by] == '#')continue;if (bx<1 || bx>w || by<1 || by>h)continue;if (vis[bx][by])continue;vis[bx][by] = 1;cnt++;q.push({bx,by});}}
}int main()
{/*注意:本题是先输入列再输入行*/while (cin >> h >> w && w && h)//注意要判断w和h都为0结束{for (int i = 1; i <= w; i++){for (int j = 1; j <= h; j++){cin >> g[i][j];if (g[i][j] == '@')sx = i, sy = j;}}//多组数据注意相关状态cnt = 1;memset(vis, 0, sizeof vis);//vis数组全体清0vis[sx][sy] = 1;dfs({ sx, sy });cout << cnt << endl;}return 0;
}
1219:马走日--dfs
注意:本题需要用到回溯算法,故只能用深度优先搜索
【题目描述】
马在中国象棋以日字形规则移动。
请编写一段程序,给定n×m大小的棋盘,以及马的初始位置(x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。
【输入】
第一行为整数T(T < 10),表示测试数据组数。
每一组测试数据包含一行,为四个整数,分别为棋盘的大小以及初始位置坐标n,m,x,y。(0≤x≤n-1,0≤y≤m-1, m < 10, n < 10)。
【输出】
每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,0为无法遍历一次。
【输入样例】
1 5 4 0 0
【输出样例】
32
#include<iostream>
using namespace std;
const int N = 1e2 + 10;
int g[N][N];//迷宫数组
bool vis[N][N];//二维标记数组
//方向数组--八个方向
int dx[] = { 1,1,-1,-1,2,2,-2,-2 };
int dy[] = { 2,-2,2,-2,1,-1,1,-1};
int t; int n, m,sx,sy;
int cnt;
void dfs(int px, int py, int depth)
{if (depth == n * m)//按照此时的搜索方案已经搜完整个棋盘了{cnt++;return;}for (int i = 0; i < 8; i++)/*注意:八个方向*/{int bx = px + dx[i], by = py + dy[i];if (vis[bx][by])continue;if (bx<1 || bx>n || by<1 || by>m)continue;vis[bx][by] = 1;dfs(bx, by,depth+1);//回溯vis[bx][by] = 0;}}
int main()
{cin >> t;while (t--){cin >> n >> m;//多组数据相关状态清空cnt =0;cin >> sx >> sy;sx++, sy++;memset(vis, 0, sizeof vis);vis[sx][sy] = 1;dfs(sx, sy,1);//起点是第一层,最后应该走到n*m层结束cout << cnt << endl;}return 0;
}
1212:LETTERS--dfs
【题目描述】
给出一个row×col���×���的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母。问最多可以经过几个字母。
【输入】
第一行,输入字母矩阵行数R�和列数S�,1≤R,S≤201≤�,�≤20。
接着输出R�行S�列字母矩阵。
【输出】
最多能走过的不同字母的个数。
【输入样例】
3 6 HFDFFB AJHGDH DGAGEH【输出样例】
6
#include<iostream>
using namespace std;
char g[N][N];
bool vis[N];
int dx[] = { 1,-1,0,0};
int dy[] = { 0,0,1,-1};
int n, m;
int ans = 0;
void dfs(int px,int py,int depth)
{ans = max(ans, depth);//选取经过字母数最多的for (int i = 0; i < 4; i++){int bx = px + dx[i], by = py + dy[i];if (vis[g[bx][by]])continue;if (bx<1 || bx>n || by<1 || by>m) continue;vis[g[bx][by]] = 1;dfs(bx, by, depth + 1);vis[g[bx][by]] =0;//回溯}
}
int main()
{cin >> n >> m;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> g[i][j];}}vis[g[1][1]] = 1;dfs(1,1,1);cout << ans;return 0;
}
求最短路径
1251:仙岛求药--bfs
【题目描述】
少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶。叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处。迷阵由M×N个方格组成,有的方格内有可以瞬秒李逍遥的怪物,而有的方格内则是安全。现在李逍遥想尽快找到仙药,显然他应避开有怪物的方格,并经过最少的方格,而且那里会有神秘人物等待着他。现在要求你来帮助他实现这个目标。
下图 显示了一个迷阵的样例及李逍遥找到仙药的路线。
【输入】
输入有多组测试数据. 每组测试数据以两个非零整数 M 和 N 开始,两者均不大于20。M 表示迷阵行数, N 表示迷阵列数。接下来有 M 行, 每行包含N个字符,不同字符分别代表不同含义:
1)‘@’:少年李逍遥所在的位置;
2)‘.’:可以安全通行的方格;
3)‘#’:有怪物的方格;
4)‘*’:仙药所在位置。
当在一行中读入的是两个零时,表示输入结束。
【输出】
对于每组测试数据,分别输出一行,该行包含李逍遥找到仙药需要穿过的最少的方格数目(计数包括初始位置的方块)。如果他不可能找到仙药, 则输出 -1。
【输入样例】
8 8 .@##...# #....#.# #.#.##.. ..#.###. #.#...#. ..###.#. ...#.*.. .#...### 6 5 .*.#. .#... ..##. ..... .#... ....@ 9 6.#..#. .#.*.# .####. ..#... ..#... ..#... ..#... #.@.## .#..#. 0 0
【输出样例】
10
8
-1
#include<iostream>
#include<queue>
using namespace std;
const int N = 1e2 + 10;
int n, m,sx,sy,tx,ty;
char g[N][N];
bool vis[N][N];
int ans = -1;
int dx[] = { 0,0,1,-1 };
int dy[] = { 1,-1,0,0 };
struct point { int x, y, depth; };
void bfs(point p) {queue<point> q;q.push(p); vis[p.x][p.y] = 1;while (!q.empty()) {point cur = q.front(); q.pop();if (cur.x == tx && cur.y == ty) {ans= cur.depth - 1;return;}for (int i = 0; i < 4; i++) {int bx = cur.x + dx[i], by = cur.y + dy[i];if (bx<1 || bx>n || by<1 || by>m) continue;if (vis[bx][by]) continue;if (g[bx][by] == '#') continue;vis[bx][by] = 1;q.push({ bx,by,cur.depth + 1 });}}
}
int main() {while (cin >> n >> m && n && m) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> g[i][j];if (g[i][j] == '@') sx = i, sy = j;if (g[i][j] == '*') tx = i, ty = j;}}ans = -1;memset(vis, 0, sizeof vis);bfs({ sx,sy,1 });cout << ans << endl;}return 0;
}
1330:【例8.3】最少步数--bfs
【题目描述】
在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”。有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字。他的同桌平时喜欢下围棋,知道这件事后觉得很有趣,就想试一试,在一个(100×100)的围棋盘上任选两点A、B,A点放上黑子,B点放上白子,代表两匹马。棋子可以按“日”字走,也可以按“田”字走,俩人一个走黑马,一个走白马。谁用最少的步数走到左上角坐标为(1,1)的点时,谁获胜。现在他请你帮忙,给你A、B两点的坐标,想知道两个位置到(1,1)点可能的最少步数。
【输入】
A、B两点的坐标。
【输出】
最少步数。
【输入样例】
12 16 18 10
【输出样例】
8 9
#include<iostream>
#include<queue>
const int N = 1e2 + 10;
char g[N][N];
bool vis[N][N];
int dx[] = {1,1,-1,-1,2,2,-2,-2,2,2,-2,-2};
int dy[] = {2,-2,2,-2,1,-1,1,-1,2,-2,2,-2};
int n, m;
int sx, sy;
int ans;
struct point
{int x, y,depth;
};
void bfs(point s)
{queue<point>q;q.push(s); vis[s.x][s.y] = 1;while (!q.empty()){point cur = q.front(); q.pop();if (cur.x == 1 && cur.y == 1){ans=cur.depth - 1 ;return;}for (int i = 0; i < 12; i++){int bx = cur.x + dx[i], by = cur.y + dy[i];if (bx<1 || bx>100 || by<1 || by>100)continue;if (vis[bx][by])continue;//注意,搜索时也不能搜0vis[bx][by] = 1;q.push({ bx, by,cur.depth+1});}}
}int main()
{int t = 2;while (t--){ans = 0;cin >> sx>>sy;memset(vis, 0, sizeof vis);bfs({ sx, sy ,1});cout << ans<<endl;}return 0;
}
1255:迷宫问题--bfs
【题目描述】
定义一个二维数组:
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表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
【输入】
一个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
【输出样例】
(0, 0) (1, 0) (2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (3, 4) (4, 4)
#include<iostream>
#include<queue>
using namespace std;
const int N = 1e2 + 10;
char g[N][N];
bool vis[N][N];
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};
struct point
{int x, y;
};
point path[N][N];
void bfs(point s)
{queue<point>q;q.push(s); vis[s.x][s.y] = 1;while (!q.empty()){point cur = q.front(); q.pop();if (cur.x == 5 && cur.y == 5)return;for (int i = 0; i < 4; i++){int bx = cur.x + dx[i], by = cur.y + dy[i];if (bx < 1 || bx>5 || by < 1 || by>5)continue;if (g[bx][by] == '1')continue;if (vis[bx][by])continue;vis[bx][by] = 1;path[bx][by] = cur;q.push({bx, by});}}
}
void print(int px,int py)
{if (px == 0 && py == 0)return;print(path[px][py].x, path[px][py].y);printf("(%d, %d)\n", px-1, py-1);
}
int main()
{for (int i = 1; i <= 5; i++)for (int j = 1; j <= 5; j++)cin >> g[i][j];bfs({1,1});print(5,5);return 0;
}
1257:Knight Moves【题目描述】 输入n�代表有个n×n�×�的棋盘,输入开始位置的坐标和结束位置的坐标,问一个骑士朝棋盘的八个方向走马字步,从开始坐标到结束坐标可以经过多少步。 【输入】 首先输入一个n�,表示测试样例的个数。 每个测试样例有三行。 第一行是棋盘的大小L(4≤L≤300)�(4≤�≤300); 第二行和第三行分别表示马的起始位置和目标位置(0..L−1)(0..�−1)。 【输出】 马移动的最小步数,起始位置和目标位置相同时输出00。 【输入样例】 3
8
0 0
7 0
100
0 0
30 50
10
1 1
1 1 【输出样例】 5
28
0 |
#include<iostream>
#include<queue>
//#include<Windows.h>//动画演示
using namespace std;
const int N = 3e2 + 10;
char g[N][N];
bool vis[N][N];
int dx[] = {1,1,2,2,-1,-1,-2,-2};
int dy[] = {2,-2,1,-1,2,-2,1,-1};
int t;
int n,sx, sy, tx, ty;
int ans;
struct point { int x; int y; int depth; };
void dfs(point s)
{queue<point>q;q.push(s); vis[s.x][s.y] = 1;while (!q.empty()){point cur = q.front(); q.pop();if (cur.x == tx && cur.y == ty){ans = cur.depth-1;return;}for (int i = 0; i < 8; i++){int bx = cur.x + dx[i], by = cur.y + dy[i];if (bx<1 || bx> n || by<1 || by>n) continue;if (vis[bx][by]) continue;vis[bx][by] = 1;q.push({ bx, by,cur.depth+1 });}}}int main()
{cin >> t;while (t--){cin >> n;cin >> sx >> sy >> tx >> ty;sx++, sy++,tx++, ty++;ans = 0;memset(vis, 0, sizeof vis);dfs({ sx, sy,1 });cout << ans<<endl;}return 0;
}
相关文章:

图论之dfs与bfs的练习
dfs--深度优选搜索 bfs--广度优先搜索 迷宫问题--dfs 问题: 给定一个n*m的二维迷宫数组其中S是起点,T是终点,*是墙壁(无法通过), .是道路 问从起点S出发沿着上下左右四个方向走,能否走到T点&a…...
Vue练习5:图片的引入
后续会补充 1.require引入 src -> asstes <template><img :src"url"> </template><script> export default {name: App,data(){return{url: require("./assets/logo.png"),}} } </script> 2.import引入 src…...
SpringBoot+Kafka
文章目录 一、依赖二、配置文件三、API1、生产者2、消费者 一、依赖 <!-- spring-kafka(与kafka的版本一致) --> <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId>…...

世界顶级名校计算机专业,都在用哪些书当教材?(文末送书)
目录 01《深入理解计算机系统》02《算法导论》03《计算机程序的构造和解释》04《数据库系统概念》05《计算机组成与设计:硬件/软件接口》06《离散数学及其应用》07《组合数学》08《斯坦福算法博弈论二十讲》参与规则 清华、北大、MIT、CMU、斯坦福的学霸们在新学期里…...
蓝桥杯刷题--python-8(2023 填空题)
0幸运数 - 蓝桥云课 (lanqiao.cn) res=0 for i in range (1,100000000):l_n=[]for j in str(i):l_n.append(int(j))if len(l_n) % 2 ==0:cur =len(l_n)>>1if sum(l_n[:cur])==sum(l_n[cur:]):res+=1 print(res) 0有奖问答 - 蓝桥云课 (lanqiao.cn) dfs def bfs(score, q…...

Eclipse - Reset Perspective
Eclipse - Reset Perspective 1. Window -> Perspective -> Reset Perspective2. Reset Perspective -> YesReferences 1. Window -> Perspective -> Reset Perspective 2. Reset Perspective -> Yes References [1] Yongqiang Cheng, https://yo…...
1.5v的电池电压低于多少v等于没电
对于1.5V的电池,电压低于一定值时就不再适合使用了。具体的电压值取决于电池的类型和使用设备的需求。一般来说, 对于接收设备(如收音机、BB机、遥控机等),每节电池电压一般到1.2V以下就认为没电了。有些电动玩具、剃…...

LabVIEW智能监测系统
LabVIEW智能监测系统 设计与实现一个基于LabVIEW的智能监测系统,通过高效的数据采集和处理能力,提高监测精度和响应速度。系统通过集成传感器技术与虚拟仪器软件,实现对环境参数的实时监测与分析,进而优化监控过程,提…...
代码随想录刷题第34天
第一题是柠檬水找零https://leetcode.cn/problems/lemonade-change/,感觉并没有特别靠近贪心算法,可供讨论的情况非常少,5元收下,10元返5元,20元返15元,对各种找零情况讨论一下即可。 class Solution { pu…...

AMD FPGA设计优化宝典笔记(5)低频全局复位与高扇出
亚军老师的这本书《AMD FPGA设计优化宝典》,他主要讲了两个东西: 第一个东西是代码的良好风格; 第二个是设计收敛等的本质。 这个书的结构是一个总论,加上另外的9个优化,包含的有:时钟网络、组合逻辑、触发…...

14. Qt 程序菜单实现,基于QMainWindow
目录 前言: 技能: 内容: 一、ui中直接添加控件实现 二、 完全通过代码实现菜单 参考: 前言: 基于QMainWindow,两种方式实现菜单:通过直接添加ui控件快速添加菜单和完全通过代码实现菜单&a…...

如何利用SpringSecurity进行认证与授权
目录 一、SpringSecurity简介 1.1 入门Demo 二、认证 编辑 2.1 SpringSecurity完整流程 2.2 认证流程详解 2.3 自定义认证实现 2.3.1 数据库校验用户 2.3.2 密码加密存储 2.3.3 登录接口实现 2.3.4 认证过滤器 2.3.5 退出登录 三、授权 3.1 权限系统作用 3.2 授…...

如何简单上手清华AutoGPT并搭建到本地环境
一、准备工作 安装Docker:确保你的本地机器上已经安装了Docker。如果还没有安装,请访问Docker官方网站并按照指引进行安装。--点击进入Docker官网 获取清华AutoGPT的Docker镜像:清华AutoGPT团队可能已经提供了一个Docker镜像,方便…...

【漏洞复现-通达OA】通达OA share存在前台SQL注入漏洞
一、漏洞简介 通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化软件,是与中国企业管理实践相结合形成的综合管理办公平台。通达OA为各行业不同规模的众多用户提供信息化管理能力,包…...

HTML5 Canvas与JavaScript携手绘制动态星空背景
目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>星空背景</title> </head> <body style"overflow-x:hidden;"><canvas …...
如何优雅地与ChatGPT对话?
ChatGPT已经发布了一年之久了,但你真的会使用ChatGPT吗?同一个问题,不同的问法得到的答案可能千差万别,你可以把ChatGPT当作一个知识面很广的专家,他上知天文下知地理,但他无法直接知道你的意图,…...

AI提示工程实战:从零开始利用提示工程学习应用大语言模型【文末送书-19】
文章目录 背景什么是提示工程?从零开始:准备工作设计提示调用大语言模型 实际应用示例文字创作助手代码生成持续优化与迭代数据隐私与安全性可解释性与透明度总结 AI提示工程实战:从零开始利用提示工程学习应用大语言模型【文末送书-19】⛳粉…...

量子算法入门——3.狄拉克符号与量子态(3)
3. 狄拉克符号的数学基础 左矢是右矢的共轭转置 上标*表示共轭 算符就是对狄拉克符号进行操作,就是相当于矩阵操作向量,算符对应本征值和本征态 本征值:拉伸x、y向量的程度本征态:x、y向量 上标匕首🗡符号…...
c++ STL系列——(三)list
目录 引言 list的特点 list的用法 list与其他容器的比较 结论 引言 在C STL中,list 是一个非常灵活且功能强大的双向链表容器,它允许存储任意类型的元素,并提供了丰富的操作函数,包括插入、删除、排序、查找以及对容器的遍历…...

软考29-上午题-排序
一、排序的基本概念 1-1、稳定性 稳定性指的是相同的数据所在的位置经过排序后是否发生变化。若是排序后,次序不变,则是稳定的。 1-2、归位 每一趟排序能确定一个元素的最终位置。 1-3、内部排序 排序记录全部存放在内存中进行排序的过程。 1-4、外部…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...