#include <iostream.h>
#define LINE 4
#define ROW  4void main()
{   
int a[ROW][LINE] = {{1, 0, 0, 1},{0, 0, 1, 0},{1, 1, 0, 1},{0, 1, 1, 1}}; cout<<"the source array is:"<<'\n';
for(int k1 = 0; k1 < ROW; k1++)
{
for(int k2 = 0; k2 <LINE; k2++)
cout<<"  "<<a[k1][k2];
cout<<'\n';
} for(int i = 1; i < ROW - 1; i++)
{
for(int j = 1; j < LINE - 1; j++)
{
int iTemp = 0;
iTemp = a[i-1][j] + a[i][j-1] + a[i][j+1] + a[i+1][j];
if(iTemp > 0)
a[i][j] = 1;
}
} cout<<'\n'<<"the destination array is:"<<'\n';
for(k1 = 0; k1 < ROW; k1++)
{
for(int k2 = 0; k2 <LINE; k2++)
cout<<"  "<<a[k1][k2];
cout<<'\n';
}
}

解决方案 »

  1.   

    数组遍历问题, 初始时给了一个2维数组(数组中都是1或者0,1代表实,0代表空),该建一个大小一样的空的数组,在已知数组中还是遇到1就向它的右方和下方访问,同时在新的数组中作下记录(为1的做记录),右方或下方有1时再做记录(先下后右)如果有1则设置从访问到的位置继续向下向右访问,当都访问到0时,就返回到上一层位置,再访问,当都结束时,单位数累加(每次加一)。因为考虑到有重复访问的情况,所以遇到访问到的1在新的数组中有记录时,总的单位数不累加,单独的1也算一个单位,最后算出单位数,数组开始时已给出,