Heim > Backend-Entwicklung > C++ > C++-Programm, um die Anzahl der Iterationen zu ermitteln, die erforderlich sind, um alle Zellen in Schwarz umzuwandeln

C++-Programm, um die Anzahl der Iterationen zu ermitteln, die erforderlich sind, um alle Zellen in Schwarz umzuwandeln

王林
Freigeben: 2023-08-25 18:54:31
nach vorne
969 Leute haben es durchsucht

C++-Programm, um die Anzahl der Iterationen zu ermitteln, die erforderlich sind, um alle Zellen in Schwarz umzuwandeln

Angenommen, wir haben ein Gitter, das zwei Arten von Zellen enthält; Schwarze Zellen werden durch „#“ und weiße Zellen durch „“ dargestellt. Das Raster wird uns als String-Array zur Verfügung gestellt. Jetzt müssen wir Folgendes tun.

  • Wir wandeln jede weiße Zelle in eine schwarze Zelle um und teilen eine Seite mit der schwarzen Zelle. Wir machen das so lange, bis jede Zelle des Gitters schwarz wird.

  • Wir berechnen die Anzahl der Iterationen, die erforderlich sind, um alle Zellen des Rasters in Schwarz umzuwandeln. Die Startaufstellung muss ein schwarzes Feld enthalten.

Wenn die Eingabe also etwa h = 4, w = 4, grid = {"#..." , ".#.." , "....", "...#"} ist

Dann ist die Ausgabe 3. Es sind 3 Iterationen erforderlich, um alle Zellen in Schwarz umzuwandeln. Schritte
# . . .
. # .
. . . .
. . ....

Um dieses Problem zu lösen, folgen wir den folgenden Schritten:

Define an array dx of size: 4 containing := { 1, 0, - 1, 0 }
Define an array dy of size: 4 containing := { 0, 1, 0, - 1 }
Define one 2D array distance
Define one queue q that contain integer pairs
for initialize i := 0, when i < h, update (increase i by 1), do:
   for initialize j := 0, when j < w, update (increase j by 1), do:
      if grid[i, j] is same as &#39;#&#39;, then:
         distance[i, j] := 0
         insert one pair(i, j) into q
while (not q is empty), do:
   first element of auto now = q
   delete element from q
   for initialize dir := 0, when dir < 4, update (increase dir by 1), do:
      cx := first value of now + dx[dir]
      cy := second value of now + dy[dir]
      if cx < 0 or cx >= h or cy < 0 or cy >= w, then:
         if distance[cx, cy] is same as -1, then:
            distance[cx, cy] := distance[first value of now, second value of now] + 1
         insert one pair (cx, cy) into q
ans := 0
for initialize i := 0, when i < h, update (increase i by 1), do:
   for initialize j := 0, when j < w, update (increase j by 1), do:
      ans := maximum of ans and distance[i, j]
print(ans)
Nach dem Login kopieren

Beispiel

Sehen wir uns zum besseren Verständnis die Implementierung unten an: -

#include <bits/stdc++.h>
using namespace std;

void solve(int h, int w, vector <string> grid){
   int dx[4] = { 1, 0, -1, 0 };
   int dy[4] = { 0, 1, 0, -1 };
   vector<vector<int>> distance(h, vector<int>(w, -1));
   queue<pair<int, int>> q;
   for (int i = 0; i < h; i++) {
      for (int j = 0; j < w; j++) {
         if (grid[i][j] == &#39;#&#39;) {
            distance[i][j] = 0;
            q.push(pair<int, int>(i,j));
         }
      }
   }
   while (!q.empty()) {
      auto now = q.front();
      q.pop();
      for (int dir = 0; dir < 4; dir++) {
         int cx = now.first + dx[dir];
         int cy = now.second + dy[dir];
         if (cx < 0 || cx >= h || cy < 0 || cy >= w) continue;
         if (distance[cx][cy] == -1) {
            distance[cx][cy] = distance[now.first][now.second] + 1;
            q.push(pair<int, int> (cx, cy));
         }
      }
   }
   int ans = 0; for (int i = 0; i < h; ++i) {
      for (int j = 0; j < w; ++j) {
         ans = max(ans, distance[i][j]);
      }
   }
   cout << ans << endl;
}
int main() {
   int h = 4, w = 4; vector<string>
   grid = {"#...", ".#.." , "....", "...#"};
   solve(h, w, grid);
   return 0;
}
Nach dem Login kopieren

Eingabe

4, 4, {"#...", ".#.." , "....", "...#"}
Nach dem Login kopieren

Ausgabe

3
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonC++-Programm, um die Anzahl der Iterationen zu ermitteln, die erforderlich sind, um alle Zellen in Schwarz umzuwandeln. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage