Skip to content

Commit f42c867

Browse files
islands
1 parent a936d5a commit f42c867

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

week3/number-of-islands.c

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
void iterateSquare(int **seen, char** grid, int vertical, int startingHorizontal, int maxI, int maxJ);
2+
3+
int numIslands(char** grid, int rows, int* cols){
4+
int **seen = (int **)malloc(rows * sizeof(int*));
5+
for (int i = 0; i < rows; ++i) {
6+
seen[i] = (int *)malloc((*cols) * sizeof(int));
7+
for (int j = 0; j < *cols; ++j) {
8+
seen[i][j] = 0;
9+
}
10+
}
11+
int islands = 0;
12+
13+
// Loop through
14+
for (int i = 0; i < rows; ++ i) {
15+
for (int j = 0; j < *cols; ++j) {
16+
if (seen[i][j] == 0 && grid[i][j] == '1') {
17+
++islands;
18+
iterateSquare(seen, grid, i, j, rows, *cols);
19+
}
20+
}
21+
}
22+
23+
for (int i = 0; i < rows; ++i) free(seen[i]);
24+
free(seen);
25+
26+
return islands;
27+
}
28+
29+
30+
void iterateSquare(int **seen, char** grid, int vertical, int startingHorizontal, int maxI, int maxJ) {
31+
// Horizonally right
32+
for (int b = startingHorizontal; b < maxJ; ++b) {
33+
if (grid[vertical][b] != '1') {
34+
break;
35+
} else {
36+
seen[vertical][b] = 1;
37+
38+
if (vertical - 1 >= 0) {
39+
if (grid[vertical-1][b] == '1' && seen[vertical-1][b] == 0) {
40+
iterateSquare(seen, grid, vertical - 1, b, maxI, maxJ);
41+
}
42+
}
43+
if (vertical + 1 < maxI) {
44+
printf("1| %d, %d\n", vertical+1, b);
45+
if (grid[vertical+1][b] == '1' && seen[vertical+1][b] == 0) {
46+
iterateSquare(seen, grid, vertical + 1, b, maxI, maxJ);
47+
}
48+
}
49+
}
50+
}
51+
52+
// Horizonally left
53+
for (int b = (startingHorizontal - 1); b >= 0; --b) {
54+
if (grid[vertical][b] != '1') {
55+
break;
56+
} else {
57+
seen[vertical][b] = 1;
58+
59+
if (vertical - 1 >= 0) {
60+
if (grid[vertical-1][b] == '1' && seen[vertical-1][b] == 0) {
61+
iterateSquare(seen, grid, vertical - 1, b, maxI, maxJ);
62+
}
63+
}
64+
if (vertical + 1 < maxI) {
65+
printf("2| %d, %d\n", vertical+1, b);
66+
if (grid[vertical+1][b] == '1' && seen[vertical+1][b] == 0) {
67+
iterateSquare(seen, grid, vertical + 1, b, maxI, maxJ);
68+
}
69+
}
70+
}
71+
}
72+
}

0 commit comments

Comments
 (0)