首页 > 其他 > 详细

图元识别

时间:2020-09-10 16:49:12      阅读:66      评论:0      收藏:0      [点我收藏+]
//给图元编号
#include <iostream>
#include <queue>
using namespace std;

int pathLength = 0;

struct position
{
    int col;
    int row;
};

int labelComponent(int** grid, int row, int col)         //row 与col已经经过扩展,形成边界
{
    position offset[4];
    offset[0].row = 0; offset[0].col = 1;
    offset[1].row = 1; offset[1].col = 0;
    offset[2].row = 0; offset[2].col = -1;
    offset[3].row = -1; offset[3].col = 0;

    for (int i = 0; i < col; i++)
        grid[0][i] = grid[row - 1][i] = 1;
    for (int i = 0; i < row; i++)
        grid[i][0] = grid[i][col - 1] = 1;

    int numOfNbrs = 4;
    queue<position> q;
    position nbr, here;
    int id = 1;

    for (int i = 1; i < row - 1; i++)
        for (int j = 1; j < col - 1; j++)
        {
            if (grid[i][j] == 0)
            {
                here.row = i; here.col = j;
                grid[here.row][here.col] = ++id;

                while (true)
                {
                    for (int k = 0; k < numOfNbrs; k++)
                    {
                        nbr.row = here.row + offset[k].row;
                        nbr.col = here.col + offset[k].col;
                        if (grid[nbr.row][nbr.col] == 0)
                        {
                            grid[nbr.row][nbr.col] = id;
                            q.push(nbr);
                        }
                    }

                    if (q.empty())
                        break;
                    here = q.front();
                    q.pop();
                }
            }
        }
    return id - 1;
}

int main()
{
    int row, col;
    cin >> row >> col;
    row += 2;
    col += 2;
    int** grid = new int*[row];         //delete[]
    for (int i = 0; i < row; i++)
        grid[i] = new int[col];         //delete[]

    for (int i = 1; i < row - 1; i++)
        for (int j = 1; j < col - 1; j++)
            cin >> grid[i][j];

    cout << labelComponent(grid, row, col);

    for (int i = 0; i < row; i++)
        delete[] grid[i];
    delete[] grid;
}

 

图元识别

原文:https://www.cnblogs.com/waterrzhang/p/13646199.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!