Skip to content

Commit dc75d0c

Browse files
committed
graph floodfill
1 parent 914bde6 commit dc75d0c

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

Diff for: 469-d.cpp

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
typedef long long ll;
4+
typedef vector<ll> vi;
5+
typedef vector<vi> vvi;
6+
const int mod = 1000000007;
7+
const int sze = 100010;
8+
int dr[] = {1, 1, 0, -1, -1, -1, 0, 1};
9+
int dc[] = {0, 1, 1, 1, 0, -1, -1 , -1};
10+
char g[110][110];
11+
char t[110][110];
12+
13+
int m, n; //no of vertices
14+
15+
int floodFill(int r, int c, char c1, char c2) {
16+
if (r >= n || r < 0 || c >= m || c < 0 || t[r][c] == c2) return 0;
17+
18+
int ans = 1;
19+
if (t[r][c] == c1) t[r][c] = c2; //visited
20+
21+
for (int i = 0; i < 8; ++i) {
22+
ans += floodFill(r + dr[i], c + dc[i], c1, c2);
23+
}
24+
// g[r][c] = c1; //backtracking can't be used because 1 cell at be visited in one go
25+
//Once visited it must not be visited again
26+
return ans;
27+
28+
}
29+
30+
int main() {
31+
// freopen("in","r", stdin);
32+
int t1;
33+
cin >> t1;
34+
35+
cin.getline(g[0], 100); //consumes endl
36+
cin.getline(g[0], 100); //consumes blank line
37+
38+
while (t1--) {
39+
int i = 0; //curline
40+
m = n = 0;
41+
while (isalpha(cin.peek()) && cin.getline(g[i++], 100)) n++; //fills the matrix
42+
m = strlen(g[0]);
43+
int r, c;
44+
char rowCol[100];
45+
while (cin.getline(rowCol, 100) && strlen(rowCol) != 0) {
46+
sscanf(rowCol, "%d%d", &r, &c);
47+
copy(&g[0][0], &g[110][0], &t[0][0]); //use copy with containers
48+
// memcpy(t, g, sizeof g);
49+
cout << floodFill(--r, --c, 'W', 'L') << "\n";
50+
}
51+
if (t1) cout << "\n";
52+
}
53+
}

0 commit comments

Comments
 (0)