网站首页 > 技术文章 正文
1
单项选择
2
判断题
3
编程题
交流问题
题目分析
染色法判定二分图,可能是非连通图,所以每一个结点都要进入深搜,将染色较少的部分和较多的部分分别进行累加。
参考程序
#include<bits/stdc++.h>
usingnamespacestd;
constint N = 1e6 + 10;
int n, m;
structEdge{
int to, next;
}e[N];
int h[N], cnt = 0;
voidadd(int a, int b)
{
e[cnt].to = b;
e[cnt].next = h[a];
h[a] = cnt++;
}
int a = 0, b = 0;
int s1 = 0, s2 = 0;
int color[N];
booldfs(int u, int c){
color[u] = c;
if(c == 1) a++;
else b++;
for(int i = h[u]; ~i; i = e[i].next){
int v = e[i].to;
if(!color[v]){
if(!dfs(v, 3 - c))
returnfalse;
}
elseif(color[v] == c){
returnfalse;
}
}
returntrue;
}
intmain()
{
memset(h, -1, sizeof h);
cin >> n >> m;
while (m--)
{
int a, b;
cin >> a >> b;
add(a, b);
add(b, a);
}
for(int i = 1; i <= n; i++){
if(!color[i]){
a = 0, b = 0;
dfs(i, 1);
s1 += min(a, b);
s2 += max(a, b);
}
}
cout << s1 << " " << s2 << endl;
return0;
}
俄罗斯方块
题目分析
- Flood Fill 联通块问题
- 将转弯用 0 1 2 3 拼成的字符串表示
- 如果没有路回溯用空格进行分隔。
参考程序
#include<bits/stdc++.h>
usingnamespacestd;
typedeflonglong ll;
constint N = 510;
int n, m;
int a[N][N]; // 网格颜色矩阵
int book[N][N]; // 标记是否访问
unordered_map<string, int> mp; // 存储形状序列化字符串
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
// DFS 遍历连通块并记录路径形状
voiddfs(int x, int y, string &s){
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
// 边界与同色判断
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m) {
if (book[nx][ny] || a[nx][ny] != a[x][y]) continue;
s += char(i + '0'); // 记录方向
book[nx][ny] = 1; // 标记访问
dfs(nx, ny, s);
}
}
s += ' '; // 分隔回溯结构,避免形状混淆
}
intmain(){
scanf("%d %d", &n, &m);
// 读入颜色矩阵
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
scanf("%d", &a[i][j]);
int ans = 0;
// 遍历所有点
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (!book[i][j]) {
book[i][j] = 1;
string s = "";
// printf("(%d,%d)\n", i, j);
dfs(i, j, s);
// cout << s << endl;
// 若未出现过该形状,计入种类
if (!mp[s]) ans++;
mp[s] = 1;
}
}
}
printf("%d\n", ans);
return0;
}
猜你喜欢
- 2025-06-08 洛谷刷题C++语言 | P1036 选数(洛谷p5719答案c语言)
- 2025-06-08 用C实现协程库(c++20协程库)
- 2025-06-08 树莓派Pico快速上手教程之MicroPython和C使用说明
- 2025-06-08 洛谷刷题C++语言 | P1618 三连击(升级版)
- 2025-06-08 c++中的对齐问题(c++怎么左对齐)
- 2025-06-08 洛谷刷题C++语言 | P1135 奇怪的电梯
- 2025-06-08 小猴编程C++ | 特殊的三位数(小猴编程学而思编程)
- 2025-06-08 洛谷刷题C++语言 | P1424 小鱼的航程(改进版)
- 2025-06-08 小猴编程C++ | 数字替换(小猴编程官网)
- 2025-06-08 C++ 20 module小试(c++实验二)
- 08-06中等生如何学好初二数学函数篇
- 08-06C#构造函数
- 08-06初中数学:一次函数学习要点和方法
- 08-06仓颉编程语言基础-数据类型—结构类型
- 08-06C++实现委托机制
- 08-06初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 08-06一文讲透PLC中Static和Temp变量的区别
- 08-06类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 1531℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 685℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 536℃MySQL service启动脚本浅析(r12笔记第59天)
- 501℃启用MySQL查询缓存(mysql8.0查询缓存)
- 500℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 486℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 469℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 467℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)