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

โปรแกรมค้นหาจำนวนกลุ่มขั้นต่ำในเสาสื่อสารใน C++?


สมมติว่าเรามีเมทริกซ์ไบนารี 2 มิติ โดยที่ 1 แทนหอสื่อสาร และ 0 แทนเซลล์ว่าง หอคอยสามารถสื่อสารได้ดังนี้:1. หากหอคอย A และหอคอย B อยู่ในแถวหรือคอลัมน์เดียวกันก็สามารถสื่อสารกันได้ 2. หากหอคอย A สามารถพูดคุยกับหอคอย B และ B สามารถพูดคุยกับ C ได้ A สามารถพูดคุยกับ C (คุณสมบัติสกรรมกริยา) เราต้องหาจำนวนหอคอยทั้งหมดที่มีอยู่ (นี่คือกลุ่มของหอคอยที่สามารถพูดคุยกันได้)

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

1 1 0
0 0 1
1 0 1

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

  • กำหนดฟังก์ชัน dfs() ซึ่งจะใช้เมทริกซ์อาร์เรย์ 2 มิติหนึ่งตัว i, j, n, m,

  • เมทริกซ์[i, j] :=2

  • สำหรับการเริ่มต้น k :=1 เมื่อ k

    • p :=(i + k) mod n

    • q :=เจ

    • ถ้า matrix[p, q] เหมือนกับ 1 แล้ว:

      • dfs(เมทริกซ์, p, q, n, m)

  • สำหรับการเริ่มต้น k :=1 เมื่อ k

    • p :=ผม

    • q =(j + k)

    • ถ้า matrix[p, q] เหมือนกับ 1 แล้ว:

      • dfs(เมทริกซ์, p, q, n, m)

  • จากวิธีหลัก ให้ทำดังนี้:

  • n :=ขนาดของเมทริกซ์

  • ตอบ :=0

  • สำหรับการเริ่มต้น i :=0 เมื่อฉัน

    • สำหรับการเริ่มต้น j :=0 เมื่อ j

      • ถ้า matrix[i, j] เหมือนกับ 1 แล้ว:

        • (เพิ่มขึ้นทีละ 1)

        • dfs(เมทริกซ์, ผม, เจ, n, ม.)

  • กลับมาอีกครั้ง

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

ตัวอย่าง

#include ใช้เนมสเปซ std;class Solution { public:void dfs(vector>&matrix, int i, int j, int&n, int&m) { matrix[i ][j] =2; สำหรับ (int k =1; k >&เมทริกซ์) { int n =matrix.size(), m =matrix[0].size(); int ans =0; for (int i =0; i >&เมทริกซ์) { ส่งคืน (โซลูชันใหม่())->แก้ (เมทริกซ์);}หลัก(){ vector> v ={ {1,1 ,0}, {0,0,1}, {1,0,1} }; ศาล <<แก้ (v);}

อินพุต

<ก่อน>{{1,1,0},{0,0,1},{1,0,1}};

ผลลัพธ์

1