依旧皓仔
2026-08-24 20:57:18
发布于:北京
0阅读
0回复
0点赞
思路就是暴力枚举,枚举每个点的四个相邻的点并统计,最后输出
#include<bits/stdc++.h>
using namespace std;
int a[1005][1005];
int mp[1005][1005];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==a[i-1][j]){
mp[i][j]++;
}
if(a[i][j]==a[i+1][j]){
mp[i][j]++;
}
if(a[i][j]==a[i][j-1]){
mp[i][j]++;
}
if(a[i][j]==a[i][j+1]){
mp[i][j]++;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<mp[i][j]<<" ";
}
cout<<endl;
}
}
当然中间代码的四个点部分也可以简化成这样,用方向数组来找准位置
#include<bits/stdc++.h>
using namespace std;
int a[1005][1005];
int mp[1005][1005];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int l=0;l<4;l++){
if(a[i][j]==a[i+dx[l]][j+dy[l]]){
mp[i][j]++;
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<mp[i][j]<<" ";
}
cout<<endl;
}
}
这里空空如也







有帮助,赞一个