This puzzle is a prelude to a hard puzzle. In my opinion, it does not really deserve to be in the medium section. It involves a graph traversal, but in a 2-dimension graph, so there is no need to use a proprer graph structure. The aim is, to find for each node the next node to the right, and the next node below.
#include <stdlib.h>
#include <stdio.h>
int main()
{
int width, height;
scanf("%d\n%d\n", &width, &height);
// Initializes the grid
char grid[width][height];
char line[31];
for (int i = 0; i < height; i++) {
fgets(line,31,stdin);
for (int j = 0; j < width ; j++)
grid[j][i] = line[j];
}
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if (grid[j][i] == '0') {
printf("%d %d ", j, i);
// Search for the next node on the line
int jj = 1;
while ((j+jj < width) && (grid[j+jj][i] == '.'))
jj++;
if (j+jj < width)
printf("%d %d ", j+jj, i);
else
printf("%d %d ", -1, -1);
// Search for the next node on the row
int ii = 1;
while ((i+ii < height) && (grid[j][i+ii] == '.'))
ii++;
if (i+ii < height)
printf("%d %d\n", j, i+ii);
else
printf("%d %d\n", -1, -1);
}
}
}
}
width, height, grid = int(input()), int(input()), []
for i in range(height):
grid.append(list(input()))
for i in range(height):
for j in range(width):
if grid[i][j] == '0':
print("{} {} ".format(j, i), end="")
jj = 1;
while j+jj < width and grid[i][j+jj] == '.':
jj+=1
if j+jj < width:
print("{} {} ".format(j+jj, i), end="")
else:
print("-1 -1 ", end="")
ii = 1;
while i+ii < height and grid[i+ii][j] == '.':
ii+=1
if i+ii < height:
print("{} {} ".format(j, i+ii))
else:
print("-1 -1 ")