如何在网格周围创建边界

时间:2013-03-18 04:50:56

标签: c++

该程序应输出12x24的网格,所有外线输出0,内部输出1

这是我试图让第一列和第一行输出0:

#include <iostream>

using namespace std;
#define N 24
// print:
//
// Prints the simulation matrix M as spaces, *'s, and T's.
//
void print(int M[][N], int ROWS, int COLS)
{
// YOU MUST IMPLEMENT THIS:
}
//
// fill:
//
// Fills the simulation matrix such that the boundary rows
// and columns are empty, the internal area is all trees,
// and one tree is burning at index position (row, col).
//
void fill(int M[][N], int ROWS, int COLS, int row, int col)
{
// YOU MUST IMPLEMENT THIS:

//
// main:
}//
int main()
{
int M[N/2][N];
int ROWS, COLS;
int r, c;
ROWS = sizeof(M) / sizeof(M[0]);
COLS = sizeof(M[0]) / sizeof(M[0][0]);
fill(M, ROWS, COLS, 1, 1);
for(r=0; r< ROWS; r++)
{
for(c=0; c< COLS; c++)
{
    if(ROWS>1)
    {
    M[ROWS][COLS]=1;
    cout<< M[ROWS][COLS];
    }
    else
    {

    M[ROWS][COLS]=0;
    cout<< M[ROWS][COLS];
}
}
cout<< endl;
}

print(M, ROWS, COLS);
return 0; 
}

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

首先,问问自己:“我如何创建一个盒子?”要创建一个盒子,您需要 4面然而最简单的方框可以包含两行,因为我们可以将框的高度设为零 - 或 infinitesimal < / EM> 即可。在代码中,您至少需要2行来创建一个框。

像这样:

000000000000000
000000000000000

但是,没有高度。换句话说,这是一个零高度的边框。

因此要创建一个这样的框:

000000000000000
011111111111110
000000000000000

你注意到了什么? 第一行和最后一行都是零。 ,中间行的第一个和最后一个元素是零,该行的其他所有内容都是1。

进一步扩展:

000000000000000
011111111111110
011111111111110
000000000000000

我们看到相同的模式 - 所以这可以扩展到第n行的情况。因此,算法是:

  1. 第一行和最后一行都是零。
  2. 对于所有其他行,这些行的第一列和最后一列都是0.
  3. 其他所有内容都设置为1。
  4. 因此,在您的情况下:

    for(r=0; r< ROWS; r++)
    {
        for(c=0; c < COLS; c++)
        {
            if (r == 0 || r == ROWS - 1) {
                M[r][c]=0;
            }
            else if(c == 0 || c == COLS -1) {
                M[r][c]=0;
            }
            else {
                M[r][c]=1;  
            }
            cout<< M[r][c];
        }
        cout << endl;
    }