问题描述
给定一个n*m的矩阵a,矩阵中每个元素不是0就是1,且1比0少。
矩阵中两个元素a[x1][y1]和a[x2][y2]的距离d定义为:d = ︱x1 - x2︱+︱y1 - y2︱ (||表示求绝对值,)
对于矩阵中的每一个元素,计算与它最近的值为1的元素的距离。
输入格式
第一行包括两个整数n,m(m和n在1-100之间)用空格隔开
接下来的n行中为每行的m个元素赋值为0或1
输出格式
n行,每行有m个用空格隔开的整数。第i行,第j列的整数表示a[i][j]与离它最近的值为1的元素的距离
样例输入
3 4
0 0 0 1
0 0 1 1
0 1 1 0
样例输出
3 2 1 0
2 1 0 0
1 0 0 1
我的代码(中间那步不知怎么写):
//对于每个元素,遍历整个数组,计算与元素1所在行列号的差值的绝对值之和,求得最小值
#include<bits/stdc++.h>
using namespace std;
int a[105][105],b[105][105],c[105][105],d,d[105];
int main(){
int n,m;
scanf("%d,%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
int q;
for(int i=1;i<=n;i++){
q=0;
for(int j=1;j<=m;j++){
if(a[i][j]==1){
q=a[i][j];
}
b[i][j]=q;
}
}
for(int i=1;i<=n;i++){
q=0;
for(int j=1;j<=m;j++){
if(a[i][j]==0){
问题
}
b[i][j]=d;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<b[i][j];
}
}
return 0;
}