Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การสะท้อนเส้นใน C++


สมมุติว่าเรามี n จุดบนระนาบ 2 มิติ เราต้องตรวจสอบว่ามีเส้นใดขนานกับแกน y ที่สะท้อนจุดที่กำหนดแบบสมมาตรหรือไม่ กล่าวคือ ตรวจสอบว่ามีเส้นตรงที่สะท้อนจุดทั้งหมดบนเส้นที่กำหนดหรือไม่ เซตของจุดเดิมจะเท่ากับจุดสะท้อน

ดังนั้น หากอินพุตเหมือนกับคะแนน =[[1,1],[-1,1]]

การสะท้อนเส้นใน C++

แล้วผลลัพธ์จะเป็นจริง

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดหนึ่งชุดตกลง

  • n :=ขนาดของคะแนน

  • minVal :=inf

  • maxVal :=-inf

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • minVal :=ขั้นต่ำของ minVal และคะแนน[i, 0]

    • maxVal :=สูงสุดของ maxVal และคะแนน[i, 0]

    • แทรกจุด[i] ลงในตกลง

  • กลาง :=maxVal + minVal

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • x :=คะแนน[i, 0]

    • y :=คะแนน[i, 1]

    • x :=กลาง - x

    • ถ้า { x, y } ไม่อยู่ใน ok แล้ว −

      • คืนค่าเท็จ

  • คืนความจริง

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool isReflected(vector<vector<int<>& points) {
      set<vector<int< > ok;
      int n = points.size();
      int minVal = INT_MAX;
      int maxVal = INT_MIN;
      for (int i = 0; i < n; i++) {
         minVal = min(minVal, points[i][0]);
         maxVal = max(maxVal, points[i][0]);
         ok.insert(points[i]);
      }
      int mid = maxVal + minVal;
      for (int i = 0; i < n; i++) {
         int x = points[i][0];
         int y = points[i][1];
         x = mid - x;
         if (!ok.count({ x, y }))
            return false;
      }
      return true;
   }
};
main(){
   Solution ob;
   vector<vector<int<> v = {{1,1},{-1,1}};
   cout << (ob.isReflected(v));
}

อินพุต

{{1,1},{-1,1}}

ผลลัพธ์

1