如何使用标志编码

How can i use flag coding?

本文关键字:编码 标志 何使用      更新时间:2023-10-16

嗨,我是 C++ 的初学者

好吧,我以前从未使用过标志,有人告诉我可以使用标志:

我需要使用标志编码填充此形状

好吧,这是代码:

#include <iostream>
using namespace std;
int polygon[10][10] = 
{
    {1,1,1,1,1,1,1,1,1,1},
    {1,1,1,2,2,2,2,1,1,1},
    {1,1,1,2,1,1,2,1,1,1},
    {1,2,2,2,1,1,2,2,2,1},
    {1,2,1,1,1,1,1,1,2,1},
    {1,2,1,1,1,1,1,1,2,1},
    {1,2,1,1,1,1,1,1,2,1},
    {1,2,1,1,1,1,1,1,2,1},
    {1,2,2,2,2,2,2,2,2,1},
    {1,1,1,1,1,1,1,1,1,1},
};
int main()
{
    int row,column;
    char c='y';
    for (int row = 0; row<10; row++)
    { 
        for (int column=0; column <10; column++)
        {
            if(polygon[row][column]==1) cout << " ";
            else if(polygon[row][column]==2) 
            {
                cout << "+";
            }
            else 
                cout << " ";
        }
        cout << "n";
    }
    system("pause");
}

此代码将打印出带有顶部的方形形状关于如何使用标志编码填写此形状的任何想法

例如在数组中,我可以像 如果行和列到达前 2 个,它将开始用 0 填充形状,当它遇到另一侧的其他 2 个时,它会停止并开始一个新行直到形状被填充

我不知道如何使用这里的标志,我只知道这个概念

任何人都可以帮忙吗

while( polygon[row][column] == 2)
{
    row+=0;
    if (row == 2)
    {
     // in this part i need to go to the next line
    }
}

的朋友给了我做这样的事情以填充形状的提示,但我不太明白她

在编程中,术语"flag"通常由布尔类型表示。在编程的意义上,标志就像一个开关,它要么打开(真(,要么关(假(。我注意到您的形状由 1 s 和 2 s 组成,并且只能猜测您的朋友何时建议您使用"标志编码",他们的意思是您使用 bool 数据类型。或者,在C++ 0将计算为在条件中false(if (0)if (false)相同(,因此您可以使用0代替12 1(表示"不是形状的一部分"(并1代替您的2(表示"形状的一部分(。

从这里开始,您的比较将更简单一些,而不是if (polygon[row][column] == 2)您可以编写if (polygon[row][column]),只有当 polygon[row][column] 处的值不为零时,该值才会计算为 true。

你可以做的是有一个标志,上面写着"我在形状中吗?每次遇到形状的边框时,都需要打开此标志,如果它已打开并且遇到另一个边框,则需要将其关闭。

编辑:

水平边界是一个挑战。真正知道使用常规扫描的唯一方法是扫描直到线的尽头,并且只有当有另一个边框时,您才处于形状中。

如果您可以假设遇到的第一个边框是水平的,那就更容易了,但是识别底部水平边框仍然存在问题。

您可以通过首先从顶部扫描,找到带有边框的第一行来解决这个问题。现在您可以知道该行中没有"形状"区域。然后您可以从底部扫描找到带有边框的最后一行。现在你可以知道这条线没有"形状"区域。剩下的就是使用之前建议的算法在这两条线之间扫描。

假设画布必须包含一个简单的闭合多边形,您可以做的是:从边框将所有外部字段更改为"3",将它们"标记"为外部字段:

- start at a corner and go round the edges (assuming polygon can be on the edge).     
    is the field 1?  
      - make it a 3.  
      -  repeat this for all (not diagonal) neighbouring fields in a recursive way.
- when printing, use a different character for 
    - 1 (inside)
    - 2 (border)
    - other (outside)