สมมติว่ามีลูกบอลอยู่ในเขาวงกตที่มีที่ว่างและกำแพง ตอนนี้ลูกบอลสามารถผ่านเส้นทางที่ว่างเปล่าได้โดยการกลิ้งไปในทิศทางใดก็ได้ เช่น ขึ้น ลง ซ้าย หรือขวา แต่จะไม่หยุดกลิ้งจนกว่าจะชนกำแพง เมื่อบอลหยุดก็สามารถเลือกทิศทางต่อไปได้
เราต้องเริ่มต้นตำแหน่งลูก ปลายทาง และเขาวงกต เราต้องตรวจสอบว่า ลูกบอลสามารถหยุดที่ปลายทาง เขาวงกตแสดงด้วยอาร์เรย์ 2 มิติหนึ่งชุด ในที่นี้ 1 หมายถึงผนังและ 0 หมายถึงพื้นที่ว่าง พรมแดนของเขาวงกตเป็นกำแพงทั้งหมด พิกัดต้นทางและปลายทางจะแสดงด้วยดัชนีแถวและคอลัมน์
ดังนั้น หากอินพุตเป็นเหมือนเขาวงกตที่แสดงโดยอาร์เรย์ 2 มิติ
0 | 0 | 1 | 0 | 0 |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
1 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
ตำแหน่งเริ่มต้นคือ (0, 4) ตำแหน่งปลายทางคือ (4, 4) จากนั้นผลลัพธ์จะเป็นจริง วิธีหนึ่งที่เป็นไปได้คือ − ซ้าย ถึง ลง ไปทางขวา .
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#includeใช้เนมสเปซ std;class Solution {public:bool hasPath(vector &grid, vector q; q.push(เริ่ม); set เยี่ยมชม; visit.insert(เริ่ม); ในขณะที่ (!q.empty()) { vector =0 &&!grid[i - 1][y]) i--; ถ้า (!visited.count({ i, y })) { visit.insert({ i, y }); q.push({ ผม, y }); } ผม =y; ในขณะที่ (i + 1 =0 &&!grid[x][i - 1]) i--; ถ้า (!visited.count({ x, i })) { visit.insert({ x, i }); q.push({ x ผม }); } } คืนค่าเท็จ }};main(){ โซลูชัน ob; เวกเตอร์<เวกเตอร์ v ={{0,0,1,0,0},{0,0,0,0,0},{0,0,0,1,0},{1,1 ,0,1,1},{0,0,0,0,0}}; เวกเตอร์ อินพุต
<ก่อน>{{0,0,1,0,0},{0,0,0,0,0},{0,0,0,1,0},{1,1,0,1,1 },{0,0,0,0,0}},{0,4},{4,4}
ผลลัพธ์
1