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

เขาวงกตใน C++


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

เราต้องเริ่มต้นตำแหน่งลูก ปลายทาง และเขาวงกต เราต้องตรวจสอบว่า ลูกบอลสามารถหยุดที่ปลายทาง เขาวงกตแสดงด้วยอาร์เรย์ 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) จากนั้นผลลัพธ์จะเป็นจริง วิธีหนึ่งที่เป็นไปได้คือ − ซ้าย ถึง ลง ไปทางขวา .

เขาวงกตใน C++

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

ตัวอย่าง

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

#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