网格染色问题

有一个网格,在初始状态下所有网格都是空白的。现有如下操作:执行n次操作,每次选择坐标对应的那一行和一列,在该行或该列上选择两个端点网格,将两个端点网格间的所有网格(包括端点网格)都染色。具体染色规则:如果两个网格坐标(x1, y1)和(x2, y2)中横坐标x1 == x2,则把这一列所有网格都染色,如果纵坐标y1 == y2则把这一行都染色。同一网格多次染色只计一次。

问:n次操作后将有多少个网格被染色?

 

#include <iostream>

#include <vector>

#include <set>

using namespace std;

 

//直接进行暴力法计算网格结果。为了避免重复,将得到的端点总数放到集合里面,最终集合里面的点的个数即为填充的面积。

int main()

{

     set<pair<int, int>> rec;

     int n;

     cin >> n;

 for (int i = 0; i < n; ++i)

{

      int x1, y1, x2, y2;

      cin >> x1 >> y1 >> x2 >> y2;

      int l, r;

      if  (x1 == x2)

    {

               //xi和x2相等时,分别得到上端点和下端点

   if  (y1 < y2)

        {

                l = y1;

                r = y2;

               

        }

           else

        {

                l = y2;

                r = y1;

               

        }

   for (int m = l; m <= r; ++m)

{

        rec.insert(make_pair(x1, m));

       

}

  

    }

      else

    {

                      //不相等的时候 , 依次从左到右计算端点格数。

   if  (x1 < x2)

        {

                l = x1;

                r = x2;

               

        }

           else

        {

                l = x2;

                r = x1;

               

        }

   for (int m = l; m <= r; ++m)

{

        rec.insert(make_pair(m, y1));

       

}

  

    }

     

}

 cout << rec.size() << endl;

    // 得到结果。

 return 0;

}

 

posted @ 2020-01-25 21:59  windy杨树  阅读(274)  评论(0编辑  收藏  举报