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

โปรแกรมหาเส้นรอบวงของรูปร่างเกาะใน Python


สมมติว่าเรามีเมทริกซ์ไบนารีโดยที่ 0 แสดงเซลล์ว่างและ 1 แสดงบล็อกที่สร้างรูปร่าง ตอนนี้เราต้องหาปริมณฑลของรูปร่าง รูปร่างจะไม่เป็นรูใด ๆ อยู่ข้างใน

ดังนั้นหากอินพุตเป็นแบบ

0 0 0 0 0
0 0 1 1 1
0 0 1 1 0
0 1 1 1 0
0 0 0 0 0

แล้วผลลัพธ์จะเป็น 14

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

  • ง :=0

  • ปริมณฑล :=0

  • ความสูง :=จำนวนแถวของเมทริกซ์

  • ความยาว :=จำนวนคอลัมน์ของเมทริกซ์

  • สำหรับแต่ละแถวในเมทริกซ์ ทำ

    • ค :=0

    • ในแต่ละแถวให้ทำ

      • ถ้า val เท่ากับ 1 แล้ว

        • เซอร์ราวด์ :=4

        • ถ้า c ไม่เหมือนกับความยาว - 1 แล้ว

          • ถ้าเมทริกซ์[d, c + 1] เหมือนกับ 1 แล้ว

            • เซอร์ราวด์ :=เซอร์ราวด์ - 1

        • ถ้า c ไม่เหมือนกับ 0 แล้ว

          • ถ้าเมทริกซ์[d, c - 1] เหมือนกับ 1 แล้ว

            • เซอร์ราวด์ :=เซอร์ราวด์ - 1

        • ถ้า d ไม่เท่ากับความสูง - 1 แล้ว

          • ถ้าเมทริกซ์[d + 1, c] เท่ากับ 1 แล้ว

            • เซอร์ราวด์ :=เซอร์ราวด์ - 1

        • ถ้า d ไม่เหมือนกับ 0 แล้ว

          • ถ้าเมทริกซ์[d - 1, c] เหมือนกับ 1 แล้ว

            • เซอร์ราวด์ :=เซอร์ราวด์ - 1

        • ปริมณฑล :=เส้นรอบรูป + รอบทิศทาง

        • ค :=ค + 1

    • d :=d + 1

  • กลับปริมณฑล

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

ตัวอย่าง

class Solution:
   def solve(self, matrix):
      d = 0
      perimeter = 0
      height = len(matrix)
      length = len(matrix[0])
      for line in matrix:
         c = 0

         for val in line:
            if val == 1:
               surround = 4
               if c != length - 1:
                  if matrix[d][c + 1] == 1:
                     surround -= 1
               if c != 0:
                  if matrix[d][c - 1] == 1:
                     surround -= 1
               if d != height - 1:
                  if matrix[d + 1][c] == 1:
                     surround -= 1
               if d != 0:
                  if matrix[d - 1][c] == 1:
                     surround -= 1
               perimeter += surround
            c += 1
         d += 1
      return perimeter

ob = Solution()
matrix = [
   [0,0,0,0,0],
   [0,0,1,1,1],
   [0,0,1,1,0],
   [0,1,1,1,0],
   [0,0,0,0,0]
]
print(ob.solve(matrix))

อินพุต

matrix = [
[0,0,0,0,0],
[0,0,1,1,1],
[0,0,1,1,0],
[0,1,1,1,0],
[0,0,0,0,0]]

ผลลัพธ์

14