谁能帮帮我呀,急。?

问题描述
给定一个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
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<}
}
return 0;
}

请你写出初始的想法

定义俩个数组,一个用来输入和判断(判断是否为‘1或0’),是‘1’就把他的坐标直接传入b数组,是‘0’我就不知如何去判断了