


Pertanyaan untuk mengemas kini bilangan sel bukan kosong yang disambungkan dalam matriks
Matriks boleh dianggap sebagai koleksi sel yang disusun dalam baris dan lajur. Setiap sel boleh mengandungi nilai, yang boleh kosong atau tidak kosong. Dalam pengaturcaraan komputer, matriks sering digunakan untuk mewakili data dalam grid dua dimensi.
Dalam artikel ini, kami akan membincangkan cara mengira bilangan sel tidak kosong yang bersambung dalam matriks dengan cekap, dengan mengambil kira kemungkinan kemas kini pada matriks. Kami akan meneroka cara yang berbeza untuk menyelesaikan masalah ini dan menyediakan contoh kod dunia sebenar untuk menunjukkan pelaksanaan.
Tatabahasa
Sintaks asas untuk menanyakan bilangan sel bukan kosong yang bersambung dalam matriks dan mengemas kininya menggunakan C/C++ boleh ditakrifkan seperti berikut -
int queryCount(int matrix[][MAX_COLS], int rows, int cols);
Di mana matriks ialah input "matriks", "baris" dan "kol" masing-masing mewakili bilangan baris dan lajur dalam matriks. Fungsi "queryCount" mengembalikan nilai integer yang mewakili bilangan sel bukan kosong yang disambungkan dalam matriks.
Algoritma
Untuk menyelesaikan masalah ini, kita boleh mengikuti algoritma berikut -
Langkah 1 - Mulakan pembolehubah "kiraan" kepada 0, ini akan menyimpan kiraan sel bukan kosong yang bersambung.
Langkah 2 - Ulangi setiap sel dalam matriks.
Langkah 3 - Untuk setiap sel, semak sama ada ia tidak kosong (iaitu mengandungi nilai bukan nol).
Langkah 4 - Jika sel tidak kosong, tambahkan Kiraan sebanyak 1.
Langkah 5 - Periksa sama ada sel mempunyai sel bersebelahan yang tidak kosong.
Langkah 6 - Jika sel bersebelahan tidak kosong, tambahkan "kiraan" sebanyak 1.
Langkah 7 - Ulang langkah 5-6 untuk semua sel bersebelahan.
Langkah 8 - 8: Selepas melelaran melalui semua sel dalam matriks, kembalikan "kiraan" sebagai hasil akhir.
Kaedah
Kaedah 1 - Cara biasa untuk menyelesaikan masalah ini ialah menggunakan algoritma Depth First Search (DFS)
Kaedah 2 - Satu lagi cara untuk melaksanakan pertanyaan untuk mencari kiraan sel tidak kosong dengan cantuman dalam matriks yang dikemas kini ialah menggunakan algoritma Breadth-First Search (BFS).
Kaedah 1
Dalam pendekatan ini, algoritma DFS melibatkan merentasi matriks secara rekursif dan menjejaki sel yang dilawati untuk mengelakkan pengiraan dua kali.
Contoh 1
Kaedah ini melakukan carian mendalam-pertama pada matriks dua dimensi. Dimensi, nilai sel dan bilangan pertanyaan matriks ditentukan secara rawak. Subrutin countConnectedCells melaksanakan DFS dan mengembalikan kiraan sel bukan nol yang bersambung, bermula dengan sel pada baris dan lajur yang ditentukan. Fungsi updateCell mengemas kini nilai sel dalam matriks. Fungsi utama memulakan benih rawak menggunakan masa semasa, kemudian menjana saiz dan elemen matriks rawak, diikuti dengan bilangan pertanyaan rawak. Untuk setiap pertanyaan, kod secara rawak memilih pertanyaan kiraan (1) atau pertanyaan kemas kini (2) dan melakukan tindakan yang sesuai. Jika jenis pertanyaan ialah 1, fungsi countConnectedCells dipanggil untuk menentukan kiraan sel yang bersambung, tidak kosong dan mencetak hasilnya. Jika jenis pertanyaan ialah 2, panggil fungsi updateCell untuk melaraskan nilai sel yang ditentukan.
#include <iostream> using namespace std; const int MAX_SIZE = 100; // Maximum size of the matrix // Function to count connected non-empty cells using DFS int countConnectedCells(int matrix[][MAX_SIZE], int rows, int cols, int row, int col, int visited[][MAX_SIZE]) { if (row < 0 || row >= rows || col < 0 || col >= cols || matrix[row][col] == 0 || visited[row][col]) return 0; visited[row][col] = 1; int count = 1; // Counting the current cell as non-empty count += countConnectedCells(matrix, rows, cols, row - 1, col, visited); // Check top cell count += countConnectedCells(matrix, rows, cols, row + 1, col, visited); // Check bottom cell count += countConnectedCells(matrix, rows, cols, row, col - 1, visited); // Check left cell count += countConnectedCells(matrix, rows, cols, row, col + 1, visited); // Check right cell return count; } // Function to update a cell in the matrix void updateCell(int matrix[][MAX_SIZE], int rows, int cols, int row, int col, int newValue) { matrix[row][col] = newValue; } // Function to initialize the matrix void initializeMatrix(int matrix[][MAX_SIZE], int rows, int cols) { for (int i = 0; i <rows; i++) { for (int j = 0; j < cols; j++) { cin >> matrix[i][j]; // Taking input for each cell in the matrix } } } int main() { int rows, cols; // Input matrix size cin >> rows >> cols; // Taking input for matrix size int matrix[MAX_SIZE][MAX_SIZE]; // Matrix to store the values int visited[MAX_SIZE][MAX_SIZE] = {0}; // Visited matrix to keep track of visited cells initializeMatrix(matrix, rows, cols); // Initialize the matrix with input values int queries; // Input number of queries cin >> queries; // Taking input for number of queries for (int i = 0; i < queries; i++) { int queryType; // Input query type (1 for count query, 2 for update query) cin >> queryType; // Taking input for query type if (queryType == 1) { int row, col; // Input row and column for count query cin >> row >> col; // Taking input for row and column int count = countConnectedCells(matrix, rows, cols, row, col, visited); // Call countConnectedCells function cout << "Count of connected non-empty cells at (" << row << ", " << col << "): " << count << endl; // Print result } else if (queryType == 2) { int row, col, newValue; // Input row, column, and new value for update query cin >> row >> col >> newValue; // Taking input for row, column, and new value updateCell(matrix, rows, cols, row, col, newValue); // Call updateCell function } } return 0; }
Output
Count of connected non-empty cells at (1, 2): 0 Count of connected non-empty cells at (0, 1): 2
Kaedah 2
Dalam pendekatan ini, Breadth First Search (BFS) ialah satu lagi algoritma traversal graf yang boleh digunakan untuk mencari bilangan sel bukan kosong yang disambungkan dalam matriks. Dalam BFS, kita bermula dari sel tertentu dan meneroka semua sel jirannya dengan cara yang luas-pertama (iaitu, lapisan demi lapisan). Kami menggunakan baris gilir untuk menjejaki sel yang sedang diakses dan menandakan sel yang telah diakses untuk mengelakkan berbilang kiraan.
Contoh 2
Kod ini membentuk perisian yang melaksanakan algoritma carian luas pertama pada matriks dua dimensi. Dimensi matriks, nilai sel dan bilangan pertanyaan dijana secara sewenang-wenangnya. Kod ini mengandungi dua subrutin: satu untuk melaksanakan BFS dan satu lagi untuk melaraskan sel dalam matriks.
Operasi BFS bermula dengan sel yang dipilih secara rawak dan menyemak sel jirannya untuk menentukan sama ada ia saling bersambung dan tidak berpenghuni. Jika ya, mereka akan ditambahkan pada baris gilir dan diproses dengan cara yang sama. Mengemas kini sel dalam matriks hanya melibatkan perubahan nilainya. Selepas menjana nombor matriks dan pertanyaan, kod secara rawak memilih pertanyaan BFS atau pertanyaan kemas kini dan melaksanakan operasi yang sesuai. Hasil pertanyaan BFS ialah kiraan sel tidak berpenghuni yang saling berkaitan bermula dari sel yang dipilih.
Kod
#include <iostream> #include <queue> #include <ctime> #include <cstdlib> using namespace std; const int MAX_SIZE = 100; // Function to perform Breadth-First Search (BFS) int bfs(int matrix[][MAX_SIZE], int rows, int cols, int row, int col, int visited[][MAX_SIZE]) { int count = 0; queue<pair<int, int>> q; q.push({row, col}); while (!q.empty()) { pair<int, int> currentCell = q.front(); q.pop(); int currentRow = currentCell.first; int currentCol = currentCell.second; if (currentRow >= 0 && currentRow <rows && currentCol >= 0 && currentCol < cols && !visited[currentRow][currentCol] && matrix[currentRow][currentCol] == 1) { count++; visited[currentRow][currentCol] = 1; q.push({currentRow - 1, currentCol}); q.push({currentRow + 1, currentCol}); q.push({currentRow, currentCol - 1}); q.push({currentRow, currentCol + 1}); } } return count; } // Function to update a cell in the matrix void updateCell(int matrix[][MAX_SIZE], int row, int col, int newValue) { matrix[row][col] = newValue; } // Function to generate a random integer between min and max (inclusive) int randomInt(int min, int max) { return rand() % (max - min + 1) + min; } int main() { srand(time(0)); int rows = randomInt(1, 10); int cols = randomInt(1, 10); int matrix[MAX_SIZE][MAX_SIZE]; int visited[MAX_SIZE][MAX_SIZE] = {0}; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { matrix[i][j] = randomInt(0, 1); } } int queries = randomInt(1, 5); for (int i = 0; i < queries; i++) { int queryType = randomInt(1, 2); if (queryType == 1) { int row = randomInt(0, rows - 1); int col = randomInt(0, cols - 1); int count = bfs(matrix, rows, cols, row, col, visited); cout << "Count of connected non-empty cells at (" << row << ", " << col << "): " << count << endl; } else if (queryType == 2) { int row = randomInt(0, rows - 1); int col = randomInt(0, cols - 1); int newValue = randomInt(0, 1); updateCell(matrix, row, col, newValue); } } return 0; }
Output
Count of connected non-empty cells at (0, 0): 0
Kesimpulan
Dalam artikel ini, kami membincangkan dua kaedah untuk mencari bilangan sel bukan kosong yang disambungkan dalam matriks dan mengemas kininya menggunakan C/C++. Algoritma Depth First Search (DFS) dan carian kesatuan (penyatuan set bercapah). Adalah penting untuk menganalisis kerumitan masa dan kerumitan ruang bagi setiap kaedah sebelum memilih kaedah yang paling sesuai untuk kes penggunaan tertentu.
Atas ialah kandungan terperinci Pertanyaan untuk mengemas kini bilangan sel bukan kosong yang disambungkan dalam matriks. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Kemas kini Blizzard Battle.net terus tersekat pada 45%, bagaimana untuk menyelesaikannya? Baru-baru ini, ramai orang telah terperangkap pada bar kemajuan 45% apabila mengemas kini perisian Mereka masih akan tersekat selepas dimulakan semula beberapa kali Jadi bagaimana untuk menyelesaikan situasi ini? itu, tutorial perisian ini akan berkongsi langkah operasi, dengan harapan dapat membantu lebih ramai orang. Kemas kini Blizzard Battle.net terus tersekat pada 45%, bagaimana untuk menyelesaikannya 1. Pelanggan 1. Mula-mula, anda perlu mengesahkan bahawa klien anda adalah versi rasmi yang dimuat turun dari laman web rasmi. 2. Jika tidak, pengguna boleh memasuki laman web pelayan Asia untuk memuat turun. 3. Selepas memasukkan, klik Muat turun di penjuru kanan sebelah atas. Nota: Pastikan anda tidak memilih Bahasa Cina Ringkas semasa memasang.

Muat turun versi terbaharu aplikasi tempahan tiket 12306 Ia adalah perisian pembelian tiket perjalanan yang semua orang sangat berpuas hati dengannya -pengesahan nama untuk membeli tiket dalam talian Semua pengguna Anda boleh membeli tiket perjalanan dan tiket penerbangan dengan mudah dan menikmati diskaun yang berbeza. Anda juga boleh mula menempah tempahan terlebih dahulu untuk merebut tiket Anda boleh menempah hotel atau pemindahan kereta khas Dengan itu, anda boleh pergi ke mana-mana yang anda mahu pergi dan membeli tiket dengan satu klik lebih mudah dan memudahkan semua orang lebih selesa. Kini editor memperincikannya dalam talian Menyediakan 12306 pengguna cara untuk melihat rekod pembelian tiket sejarah. 1. Buka Keretapi 12306, klik Saya di sudut kanan bawah, dan klik Pesanan Saya 2. Klik Dibayar pada halaman pesanan. 3. Pada halaman berbayar

Angular.js ialah platform JavaScript yang boleh diakses secara bebas untuk mencipta aplikasi dinamik. Ia membolehkan anda menyatakan pelbagai aspek aplikasi anda dengan cepat dan jelas dengan memanjangkan sintaks HTML sebagai bahasa templat. Angular.js menyediakan pelbagai alatan untuk membantu anda menulis, mengemas kini dan menguji kod anda. Selain itu, ia menyediakan banyak ciri seperti penghalaan dan pengurusan borang. Panduan ini akan membincangkan cara memasang Angular pada Ubuntu24. Mula-mula, anda perlu memasang Node.js. Node.js ialah persekitaran berjalan JavaScript berdasarkan enjin ChromeV8 yang membolehkan anda menjalankan kod JavaScript pada bahagian pelayan. Untuk berada di Ub

Bagaimana untuk menyemak kelayakan akademik saya di Xuexin.com? Anda boleh menyemak kelayakan akademik anda di Xuexin.com Ramai pengguna tidak tahu cara menyemak kelayakan akademik mereka di Xuexin.com Seterusnya, editor membawakan tutorial grafik kepada pengguna tentang cara menyemak kelayakan akademik mereka di Xuexin.com pengguna datang dan lihat! Tutorial penggunaan Xuexin.com: Cara menyemak kelayakan akademik anda di Xuexin.com 1. Pintu masuk Xuexin.com: https://www.chsi.com.cn/ 2. Pertanyaan laman web: Langkah 1: Klik pada alamat Xuexin.com di atas untuk masuk ke laman utama Klik [Education Query]; Langkah 4: Pada halaman log masuk Masukkan maklumat dan klik [Log Masuk];

Komputer rakan mempunyai kesalahan sedemikian Apabila membuka "PC ini" dan fail pemacu C, ia akan menggesa "Explorer.EXE Windows tidak boleh mengakses peranti, laluan atau fail yang ditentukan. Anda mungkin tidak mempunyai kebenaran yang sesuai untuk mengakses projek. " Termasuk folder, fail, Komputer ini, Tong Kitar Semula, dsb., klik dua kali akan muncul tetingkap sedemikian, tetapi adalah perkara biasa untuk membukanya dengan mengklik kanan. Ini disebabkan oleh kemas kini sistem Jika anda juga menghadapi situasi ini, editor di bawah akan mengajar anda cara menyelesaikannya. 1. Buka editor pendaftaran Win+R dan masukkan regedit, atau klik kanan menu mula untuk menjalankan dan masukkan regedit 2. Cari registri "Computer\HKEY_CLASSES_ROOT\PackagedCom\ClassInd";

Apabila anda menggunakan penyemak imbas Edge untuk mengakses halaman web, pernahkah anda menemui gesaan bahawa sambungan anda bukan sambungan khusus, menyebabkan penyemakan imbas web gagal? Bagaimana keadaan ini? Ramai rakan tidak tahu cara menangani masalah ini Anda boleh lihat tiga penyelesaian berikut. Kaedah 1 (mudah dan kasar): Dalam pelayar tepi, anda boleh cuba menyelesaikan masalah tapak web yang tidak boleh diakses dengan memasukkan tetapan dan mematikan fungsi keselamatan, dan kemudian menyekat kebenaran lokasi dalam kebenaran tapak web. Adalah penting untuk ambil perhatian bahawa keberkesanan dan tempoh pendekatan ini mungkin berbeza-beza, dan kesan khusus tidak dapat ditentukan. Selepas memulakan semula penyemak imbas anda, anda boleh cuba melawati tapak web untuk melihat sama ada isu itu telah diselesaikan. Kaedah 2: Laraskan papan kekunci kepada input Bahasa Inggeris

1. Letakkan fon telinga dalam kotak fon telinga dan pastikan penutupnya terbuka Tekan dan tahan butang pada kotak untuk memasuki keadaan berpasangan fon telinga. 2. Hidupkan fungsi muzik jam tangan dan pilih fon kepala Bluetooth, atau pilih fon kepala Bluetooth dalam fungsi tetapan jam tangan. 3. Pilih set kepala pada jam tangan untuk berjaya dipasangkan.

Kad grafik MSI ialah jenama kad grafik arus perdana di pasaran Kami tahu bahawa kad grafik perlu memasang pemacu untuk mencapai prestasi dan memastikan keserasian. Jadi bagaimana untuk mengemas kini pemacu kad grafik MSI kepada versi terkini? Secara amnya, pemacu kad grafik MSI boleh dimuat turun dan dipasang dari tapak web rasmi Mari ketahui lebih lanjut di bawah. Kaedah kemas kini pemacu kad grafik: 1. Pertama, kami memasuki "laman web rasmi MSI". 2. Selepas memasukkan, klik butang "Cari" di sudut kanan atas dan masukkan model kad grafik anda. 3. Kemudian cari kad grafik yang sepadan dan klik pada halaman butiran. 4. Kemudian masukkan pilihan "Sokongan Teknikal" di atas. 5.Akhir sekali pergi ke "Pemandu & Muat Turun"
