【发布时间】:2018-05-09 07:39:50
【问题描述】:
我需要为数组中的每个位置计算它周围有多少个 1 值。我尝试在其周围添加另一层 0,如果 r=1 会起作用,但在例如 r = 3 时无法弄清楚?
#include <iostream>
#include <time.h>
#include <cstdlib>
using namespace std;
int main()
{
const int n=10;
int T[n][n]= {
{1,0,0,0,1,0,1,0,0,1},
{1,1,0,0,1,0,1,1,1,0},
{0,1,0,0,1,0,1,0,0,1},
{0,1,1,0,1,0,1,1,0,1},
{0,1,0,1,1,0,0,0,0,0},
{0,1,0,1,1,0,0,0,1,0},
{1,1,0,0,1,0,0,0,0,1},
{1,1,1,1,1,0,1,1,0,0},
{0,1,0,0,1,0,1,0,0,1},
{1,1,0,0,1,0,0,1,0,1},
};
int TD[14][14]= {0};
for(int i=2; i<12; i++)
for(int j=2; j<12; j++)
TD[i][j]=T[i-2][j-2];
for(int i=0; i<14; i++)
{
for(int j=0; j<14; j++)
cout<<TD[i][j]<<" ";
cout<<endl;
}
cout<<endl<<endl<<endl;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
cout<<T[i][j]<<" ";
cout<<endl;
}
cout<<endl;
cout<<endl;
cout<<endl;
int G[14][14]= {0};
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
cout<<G[i][j]<<" ";
cout<<endl;
}
cout<<endl;
cout<<endl;
cout<<endl;
int r=1;
for(int i=2; i<13; i++)
for(int j=2; j<13; j++)
{
for(int ii=i-r; ii<=i+r; ii++)
for(int jj=j-r; jj<=j+r; jj++)
G[i][j]=G[i][j]+TD[ii][jj];
}
for(int i=2; i<12; i++)
{
for(int j=2; j<12; j++)
cout<<G[i][j]<<" ";
cout<<endl;
}
return 0;
我尝试随着数组的增加增加0s 的层数,但这不起作用。
所以我的问题是:如果这种方法很好,如果不是,你们可以建议什么样的解决方案?
【问题讨论】:
-
为什么要声明这么多数组。如果你真的只想计算每个索引的 1,你只需要第二个相同维度的数组。
-
到底是什么问题(或您的问题?)。我只是将您的代码复制粘贴到 IDE 中,它运行时没有错误...
-
尝试将 r 变量切换为大于 1 它将完全从 b 到 wallz。 T-array 是 1 和 0 所在的位置。 TD 数组是具有扩展边界(另一层 0)的数组,我只是在其中敲击了 T 数组。最后一个用于计数 1。乞求的问题很简单:“如果 r=1 但在例如 r=3 时无法弄清楚?”就像问题的头
-
只需修改您的代码,使其不会越界访问数组。并且不要使用诸如 12、13 之类的幻数,而是使用常量。
标签: c++ algorithm multidimensional-array count