เราได้ตารางเมทริกซ์ซึ่งประกอบด้วย 0 และ 1 เท่านั้น 0 หมายถึงสถานที่ว่างเปล่าและ 1 หมายถึงสิ่งกีดขวาง เราต้องหากระจกจำนวนหนึ่งที่สามารถวางเซลล์ atempty เพื่อให้กระจกเหล่านี้สามารถถ่ายโอนแสงจากด้านล่างไปขวาได้ สิ่งนี้เป็นไปได้เมื่อวางกระจกไว้ที่ดัชนี [i,j] และสำหรับเซลล์ทั้งหมดทางด้านขวาในแถวนั้น ( i ) และเซลล์ที่อยู่ด้านล่าง ( j ) ในคอลัมน์นั้นไม่มีสิ่งกีดขวาง
หากกระจกอยู่ที่ A[i][j] ดังนั้น A[i+1 ถึง n][ j ] และ A[ i ][ j+1 ถึง n ] ทั้งหมดจะว่างเปล่า กล่าวคือ 0 ดังแสดงในรูปด้านล่าง
อินพุต
<ก่อนหน้า>Arr[][] ={{0,0,1,0,0},{0,0,0,0,0},{0,0,0,0,0},{0,1 ,1,0,1},{1,1,1,0,1}}ผลลัพธ์
No. ของกระจก :3
คำอธิบาย - ดังแสดงในรูป สามารถติดกระจกไว้ที่เซลล์ได้
Arr[1][0] - แถวที่ 1 และคอลัมน์ 0 มี 0 อยู่ด้านล่างและด้านขวาทั้งหมด
Arr[2][0] - แถวที่ 2 และคอลัมน์ 0 มี 0 อยู่ด้านล่างและด้านขวาทั้งหมด
Arr[4][4] − เซลล์สุดท้าย คือ 0 และไม่มีแถวด้านล่างและคอลัมน์ทางด้านขวา
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
Array Arr[][] ใช้แทนเมทริกซ์ของ 0 และ 1 ..
-
ฟังก์ชั่น maximumMirror(int mat[][], int n) รับเมทริกซ์และอยู่ด้าน n เป็นอินพุตและส่งกลับจำนวนกระจกสูงสุดที่สามารถวางได้ตามที่แสดงด้านบน
-
แฟล็กตัวแปรใช้เพื่อทำเครื่องหมายการมีอยู่ของสิ่งกีดขวางในเซลล์ด้านล่างหรือเซลล์ทางด้านขวาของ arr [i] [j]
-
Count ใช้แทนจำนวนมิเรอร์ เริ่มแรก 0 .
-
เมทริกซ์การเคลื่อนที่จากดัชนี 0,0
-
สำหรับแต่ละเซลล์ถ้ามันว่างเปล่า (สามารถวางกระจกได้) ให้ตรวจสอบเซลล์ด้านล่าง ( k=i+1 ถึง n-1) หากมี arr[k][j] เป็นสิ่งกีดขวาง (value=1 ) ให้แบ่งในขณะที่ วนซ้ำและทำเครื่องหมายแฟล็กเป็น 1 หากไม่ ให้ตรวจสอบเซลล์ทางด้านขวาต่อไป ( l=j+1 ถึง n-1 )
-
ตั้งธงในกรณีที่มีสิ่งกีดขวาง
-
หลังจากทั้งคู่ while วนซ้ำหากแฟล็กเป็น 0 แล้วการเพิ่มขึ้นจะนับเป็นมิเรอร์ได้
-
นับกลับเป็นเลขที่ ของกระจกสูงสุด
ตัวอย่าง
// โปรแกรม C++ เพื่อค้นหาจำนวนกระจกที่สามารถถ่ายโอน// แสงจากล่างขึ้นบนขวา#includeโดยใช้เนมสเปซ std;// วิธีการคืนค่าจำนวนมิเรอร์ที่สามารถถ่ายโอนได้// แสงจากล่างขึ้นบน rightint maximumMirror(int mat[5][5], int N){ // เพื่อทำเครื่องหมายว่าเซลล์ทั้งหมดทางด้านขวาหรือด้านล่างเป็น 0--- ไม่มีสิ่งกีดขวาง int flag=0; จำนวน int=0; //นับกระจก int i,j,k,l; //สำหรับเซลล์ทั้งหมดสำหรับ (int i=0; i ผลลัพธ์
กระจกมองข้างสูงสุดที่สามารถถ่ายโอนแสงจากล่างขึ้นขวา :3