题解
2026-05-24 17:43:35
发布于:浙江
2阅读
0回复
0点赞
大家好,我是энтджей,今天是我2026年第十二次正式发题解!
能不能点个赞
首先简化题意:
- 其实就是问你这几个图形里面有几个不同的,只是图形要自己求而已啦
然后就是写代码
-
处理输入(read):
- 正常输入
-
核心部分(process):
- 寻找联通块,并记录样子(用set或map完成)
-
最后输入最大时间(write):
- 判断有几个不同的联通块,进行输出
完整代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 510;
int n, m;
int mp[N][N];
bool vis[N][N];
set<string> ans;
int dx[] = {1,0,-1,0};
int dy[] = {0,1,0,-1};
void dfs(int x,int y,string &s){
vis[x][y] = true;
for(int i = 0; i < 4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(nx < 1 || ny < 1 || nx > n || ny > m) continue;
if(vis[nx][ny]) continue;
if(mp[nx][ny] != mp[x][y]) continue;
s += char(i + '0');
dfs(nx,ny,s);
}
s += ' ';
}
void read() {
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin >> mp[i][j];
}
}
}
void process() {
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(!vis[i][j]){
string s = "";
dfs(i,j,s);
ans.emplace(s);
}
}
}
}
void write() {
cout << ans.size();
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
read();
process();
write();
return 0;
}
🎉完结撒花🎉
这里空空如也





有帮助,赞一个