LeetCode 593. 有效的正方形

给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。

一个点的坐标(x,y)由一个有两个整数的整数数组表示。

示例:

输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
输出: True

注意:

  1. 所有输入整数都在 [-10000,10000] 范围内。
  2. 一个有效的正方形有四个等长的正长和四个等角(90度角)。
  3. 输入点没有顺序。


class Solution {
public:
    bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {
       
        //对角线相互垂直的矩形是正方形
        // 垂直坐标公式 x1x2 + y1y2 = 0
        // 平行坐标公式 x1y2 - x2y1 = 0
        int re[6] ;
        re[0] = (p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1]) ; // 1+1
        re[1] = (p1[0]-p3[0])*(p1[0]-p3[0])+(p1[1]-p3[1])*(p1[1]-p3[1]) ; //1
        re[2] = (p2[0]-p3[0])*(p2[0]-p3[0])+(p2[1]-p3[1])*(p2[1]-p3[1]) ;  //1
        re[3] = (p4[0]-p3[0])*(p4[0]-p3[0])+(p4[1]-p3[1])*(p4[1]-p3[1]) ; // 2
        re[4] = (p1[0]-p4[0])*(p1[0]-p4[0])+(p1[1]-p4[1])*(p1[1]-p4[1]) ; //1
        re[5] = (p4[0]-p2[0])*(p4[0]-p2[0])+(p4[1]-p2[1])*(p4[1]-p2[1]) ;//1
        
        for(int i =0;i < 5 ; i++)
        {
            for(int j = 0; j<5-i ;j++)
            {
                if(re[j]>re[j+1])
                {
                    int t;
                    t = re[j];
                    re[j] = re[j+1] ;
                    re[j+1] = t;
                }
            }
        }
//        for(int i = 0;i<6;i++)
//        {
 //         std::cout<<re[i]<<endl;
  //      }
        if(re[0]==re[1]&&re[0]==re[2]&&re[0]==re[3]&&re[4]==re[5]&&re[4]>re[0])
        {
            
            return true;
        }
        else
        {
            return false ;
        }
        
    }
};

猜你喜欢

转载自blog.csdn.net/wx734518351/article/details/80232535