解题思路: 将1个空格放到3*3 的矩阵, 这样 ‘/’ 和'\\' 变成如下数据, 扩展后使用递归的方式进行查找。
注意 '\\’ 为单个字符, 且字符串中长度即为1
0 0 1 1 0 0
0 1 0 0 1 0
1 0 0 0 0 1
void outputMaxtrix(int** map, int num)
{
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
printf("%d, ", map[i][j]);
}
printf("\n");
}
printf("\n");
}
static int ** generate(char ** grid, int num)
{
int ** map = (int **)calloc(3 * num, sizeof(int *));
for (int i = 0; i < 3 * num; i++) {
map[i] = (int *)calloc(3 * num, sizeof(int));
}
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
if (grid[i][j] == '/') {
map[3 * i + 2][3 * j] = 1;
map[3 * i + 1][3 * j + 1] = 1;
map[3 * i][3 * j + 2] = 1;
} else if (grid[i][j] == '\\') {
map[3 * i ][3 * j] = 1;
map[3 * i + 1][3 * j + 1] = 1;
map[3 * i + 2][3 * j + 2] = 1;
}
}
}
return map;
}
void dfs(int **map, int x, int y, int num) {
if (map[x][y] != 0) {
return;
}
map[x][y] = 2;
if ((x + 1) < num) {
dfs(map, x + 1, y, num);
}
if ((y + 1) < num) {
dfs(map, x, y + 1, num);
}
if ((x - 1) >= 0) {
dfs(map, x - 1, y, num);
}
if ((y - 1) >= 0) {
dfs(map, x, y - 1, num);
}
}
int regionsBySlashes(char ** grid, int gridSize)
{
if (grid == NULL || gridSize <= 0) {
return 0;
}
int num = 3 * gridSize;
int ** map = generate(grid, gridSize);
int ret = 0;
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
if (map[i][j] == 0) {
ret++;
dfs(map, i , j, num);
}
}
}
for (int i = 0; i < num; i++) {
free(map[i]);
}
free(map);
return ret;
}