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

จำนวนเกาะใน Python


สมมติว่าเรามีตาราง มี 0 น้อยและ 1 น้อย เราต้องนับจำนวนเกาะ เกาะเป็นสถานที่ที่ล้อมรอบด้วยน้ำและเกิดขึ้นจากการเชื่อมต่อดินแดนที่อยู่ติดกันในแนวนอนหรือแนวตั้ง เราสามารถสรุปได้ว่าขอบทั้งสี่ของตารางถูกล้อมรอบด้วยน้ำทั้งหมด

สมมติว่ากริดเป็นเหมือน −

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

มีสามเกาะ

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

  • จะมีสองวิธี วิธีหนึ่งจะใช้เพื่อนับจำนวนเกาะที่เรียกว่า numIslands() และ makeWater() makeWater() จะเป็นแบบ −
  • ถ้าจำนวนแถวในตารางเป็น 0 ให้คืนค่า 0
  • n =จำนวนแถว และ m :=จำนวนคอลัมน์ และ :=0
  • สำหรับ i ในช่วง 0 ถึง n – 1
    • สำหรับ j ในช่วง 0 ถึง m
      • ถ้า grid[i, j] =1 แล้ว ans :=ans + 1
      • makeWater(i, j, n, m, grid)
  • makeWater() จะนำดัชนี i, j, row และ col นับ n และ m และกริด
  • ถ้า i <0 หรือ j <0 หรือ i>=n หรือ j>=m ให้กลับมาจากวิธีนี้
  • ถ้า grid[i, j] =0 ให้คืนค่าเป็นอย่างอื่น make grid[i, j] :=0
  • เรียก makeWater(i + 1, j, n, m, grid)
  • เรียก makeWater(i, j + 1, n, m, grid)

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

ตัวอย่าง

class Solution(object):def numIslands(self, grid):if len(grid) ==0:return 0 n=len(grid) m =len(grid[0]) ans =0 for i in range (n):สำหรับ j ในช่วง (m):ถ้า grid[i][j] =="1":ans+=1 self.make_water(i,j,n,m,grid) คืนค่า def make_water(ตัวเอง, i,j,n,m,grid):if i<0 or j<0 or i>=n or j>=m:return if grid[i][j] =="0":return else:grid[ ผม][j]="0" self.make_water(i+1,j,n,m,grid) self.make_water(i,j+1,n,m,grid) self.make_water(i-1,j ,n,m,grid) self.make_water(i,j-1,n,m,grid)ob1 =โซลูชัน ()print(ob1.numIslands([["1","1","0","0" ","0"],["1","1","0","0","0"],["0","0","1","0","0"] ,["0","0","0","1","1"]]))

อินพุต

<ก่อน>[["1","1","0","0","0"],["1","1","0","0","0"],[" 0","0","1","0","0"],["0","0","0","1","1"]]

ผลลัพธ์

3