#include <stdio.h>
#define MAXC 10
#define MAXR 10
void floodfill(char map[][MAXC+1], int i, int j, int r, int c);
int checklocation(char map[][MAXC+1], int i, int j, int r, int c);
int main() {
// FILE* ifp = fopen("bunnies.in", "r");
int numcases, loop;
// fscanf(ifp, "%d", &numcases);
printf("read cases: %d\n", numcases
);
for (loop=0; loop<numcases; loop++) {
int r, c, i=0, j=0;
// fscanf(ifp, "%d%d", &r, &c);
//printf("\nRows = %d Cols = %d\n", r,c); //debug comment out
char map[r][c];
//Read in input
for(i=0; i<r; i++) {
// fgetc(ifp);
for (j=0; j<c; j++) {
// map[i][j] = fgetc(ifp);
//printf("%c", map[i][j]); //test input read comment out
}
// printf("\n"); //test input read comment out
}
int broken = 0; //to keep track if floodfill already occured
for (i=0; i<r; i++) {
// if (broken == 1)
// continue;
for (j=0; j<c; j++) {
// if (broken == 1)
// continue;
//the whole loop only looks for P then floodfills
if(map[i][j] == 'P') {
map[i][j] = '_';
printf("calling floodfill on %d, %d", i
, j
); floodfill(map, i, j, r, c);
// broken = 1;
}
// printf("%c", map[i][j]); //test floodfill, comment out later
}
//printf("\n"); //test floodfill, comment out later
}
int found = 0;
//searches for C, calls checklocation when found
for (i=0; i<r; i++) {
for(j=0; j<c; j++) {
if (map[i][j] == 'C')
found = checklocation(map, i,j, r, c);
}
}
if (found == 1)
else
}
// fclose(ifp);
return 0;
}
//Pass map pointer, position in array i,j and row/column numbers
void floodfill(char map[][MAXC+1], int i, int j, int r, int c) {
//printf("looking at: [%d][%d]\n", i,j); //debug comment out later
//'base case' that deals with out of bounds
if (i<0 || j<0 || i>=r || j>=c)
return;
if (map[i][j] == '_') {
map[i][j] = 'P';
floodfill(map, r, c, i, j+1); //check right
floodfill(map, r, c, i, j-1); //check left
floodfill(map, r, c, i+1, j); //check below
floodfill(map, r, c, i-1, j); //check above
}
//printf("%c", map[i][j]);
}
//Same parameters as floodfill
int checklocation(char map[][MAXC+1], int i, int j, int r, int c) {
//these if statements check for p in each location around and
//makes sure the coordinate is in bounds
if ((i-1>=0) && (i-1 < r) && (j>=0) && (j < c) && (map[i-1][j] == 'P'))
return 1;
else if ((i+1>=0) && (i+1 < r) && (j>=0) && (j < c) && (map[i+1][j] == 'P'))
return 1;
else if ((i>=0) && (i < r) && (j+1>=0) && (j+1 < c) && (map[i][j+1] == 'P'))
return 1;
else if ((i>=0) && (i < r) && (j-1>=0) && (j-1 < c) && (map[i][j-1] == 'P'))
return 1;
else
return 0;
}
ICAgICNpbmNsdWRlIDxzdGRpby5oPgogICAgI2RlZmluZSBNQVhDIDEwCiAgICAjZGVmaW5lIE1BWFIgMTAKCiAgICB2b2lkIGZsb29kZmlsbChjaGFyIG1hcFtdW01BWEMrMV0sIGludCBpLCBpbnQgaiwgaW50IHIsIGludCBjKTsKICAgIGludCBjaGVja2xvY2F0aW9uKGNoYXIgbWFwW11bTUFYQysxXSwgaW50IGksIGludCBqLCBpbnQgciwgaW50IGMpOwoKICAgIGludCBtYWluKCkgewovLyAgICAgICAgRklMRSogaWZwID0gZm9wZW4oImJ1bm5pZXMuaW4iLCAiciIpOwoKICAgICAgICBwcmludGYoInN0YXJ0XG4iKTsKCiAgICAgICAgaW50IG51bWNhc2VzLCBsb29wOwovLyAgICAgICAgZnNjYW5mKGlmcCwgIiVkIiwgJm51bWNhc2VzKTsKICAgICAgICBzY2FuZigiJWQiLCAmbnVtY2FzZXMpOwoKICAgICAgICBwcmludGYoInJlYWQgY2FzZXM6ICVkXG4iLCBudW1jYXNlcyk7CgogICAgICAgIGZvciAobG9vcD0wOyBsb29wPG51bWNhc2VzOyBsb29wKyspIHsKICAgICAgICAgICAgaW50IHIsIGMsIGk9MCwgaj0wOwoKLy8gICAgICAgICAgICBmc2NhbmYoaWZwLCAiJWQlZCIsICZyLCAmYyk7CiAgICAgICAgICAgIHNjYW5mKCIlZCVkIiwgJnIsICZjKTsKICAgICAgICAgICAgLy9wcmludGYoIlxuUm93cyA9ICVkIENvbHMgPSAlZFxuIiwgcixjKTsgLy9kZWJ1ZyBjb21tZW50IG91dAogICAgICAgICAgICBjaGFyIG1hcFtyXVtjXTsKCiAgICAgICAgICAgIC8vUmVhZCBpbiBpbnB1dAogICAgICAgICAgICBmb3IoaT0wOyBpPHI7IGkrKykgewovLyAgICAgICAgICAgICAgICBmZ2V0YyhpZnApOwogICAgICAgICAgICAgICAgICBnZXRjaGFyKCk7CgogICAgICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqPGM7IGorKykgewovLyAgICAgICAgICAgICAgICAgICAgICAgIG1hcFtpXVtqXSA9IGZnZXRjKGlmcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hcFtpXVtqXSA9IGdldGNoYXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGYoIiVjIiwgbWFwW2ldW2pdKTsgLy90ZXN0IGlucHV0IHJlYWQgY29tbWVudCBvdXQKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIC8vIHByaW50ZigiXG4iKTsgLy90ZXN0IGlucHV0IHJlYWQgY29tbWVudCBvdXQKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpbnRmKCJyZWFkIGlucHV0XG4iKTsKCiAgICAgICAgICAgIGludCBicm9rZW4gPSAwOyAvL3RvIGtlZXAgdHJhY2sgaWYgZmxvb2RmaWxsIGFscmVhZHkgb2NjdXJlZAoKICAgICAgICAgICAgZm9yIChpPTA7IGk8cjsgaSsrKSB7CiAgICAgICAgICAgICAgIC8vIGlmIChicm9rZW4gPT0gMSkKICAgICAgICAgICAgICAgIC8vICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqPGM7IGorKykgewogICAgICAgICAgICAgICAgICAgLy8gaWYgKGJyb2tlbiA9PSAxKQogICAgICAgICAgICAgICAgICAgIC8vICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICAvL3RoZSB3aG9sZSBsb29wIG9ubHkgbG9va3MgZm9yIFAgdGhlbiBmbG9vZGZpbGxzCiAgICAgICAgICAgICAgICAgICAgaWYobWFwW2ldW2pdID09ICdQJykgewogICAgICAgICAgICAgICAgICAgICAgICBtYXBbaV1bal0gPSAnXyc7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiY2FsbGluZyBmbG9vZGZpbGwgb24gJWQsICVkIiwgaSwgaik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZsb29kZmlsbChtYXAsIGksIGosIHIsIGMpOwogICAgICAgICAgICAgICAgICAgICAvLyAgIGJyb2tlbiA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgIC8vIHByaW50ZigiJWMiLCBtYXBbaV1bal0pOyAvL3Rlc3QgZmxvb2RmaWxsLCBjb21tZW50IG91dCBsYXRlcgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJcbiIpOyAvL3Rlc3QgZmxvb2RmaWxsLCBjb21tZW50IG91dCBsYXRlcgogICAgICAgICAgICB9CgogICAgICAgICAgICBwcmludGYoImFmdGVyIGZsb29kZmlsbFxuIik7CgogICAgICAgICAgICBpbnQgZm91bmQgPSAwOwoKICAgICAgICAgICAgLy9zZWFyY2hlcyBmb3IgQywgY2FsbHMgY2hlY2tsb2NhdGlvbiB3aGVuIGZvdW5kCiAgICAgICAgICAgIGZvciAoaT0wOyBpPHI7IGkrKykgewogICAgICAgICAgICAgICAgZm9yKGo9MDsgajxjOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAobWFwW2ldW2pdID09ICdDJykKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBjaGVja2xvY2F0aW9uKG1hcCwgaSxqLCByLCBjKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGZvdW5kID09IDEpCiAgICAgICAgICAgICAgICBwcmludGYoInllc1xuIik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHByaW50Zigibm9cbiIpOwoKICAgICAgICB9CgovLyAgICBmY2xvc2UoaWZwKTsKICAgIHJldHVybiAwOwoKICAgIH0KCgogICAgLy9QYXNzIG1hcCBwb2ludGVyLCBwb3NpdGlvbiBpbiBhcnJheSBpLGogYW5kIHJvdy9jb2x1bW4gbnVtYmVycwogICAgdm9pZCBmbG9vZGZpbGwoY2hhciBtYXBbXVtNQVhDKzFdLCBpbnQgaSwgaW50IGosIGludCByLCBpbnQgYykgewoKICAgIC8vcHJpbnRmKCJsb29raW5nIGF0OiBbJWRdWyVkXVxuIiwgaSxqKTsgLy9kZWJ1ZyBjb21tZW50IG91dCBsYXRlcgoKICAgIC8vJ2Jhc2UgY2FzZScgdGhhdCBkZWFscyB3aXRoIG91dCBvZiBib3VuZHMKICAgIGlmIChpPDAgfHwgajwwIHx8IGk+PXIgfHwgaj49YykKICAgICAgICByZXR1cm47CgogICAgaWYgKG1hcFtpXVtqXSA9PSAnXycpIHsKICAgICAgICBtYXBbaV1bal0gPSAnUCc7CgogICAgICBmbG9vZGZpbGwobWFwLCByLCBjLCBpLCBqKzEpOyAvL2NoZWNrIHJpZ2h0CiAgICAgIGZsb29kZmlsbChtYXAsIHIsIGMsIGksIGotMSk7IC8vY2hlY2sgbGVmdAogICAgICBmbG9vZGZpbGwobWFwLCByLCBjLCBpKzEsIGopOyAvL2NoZWNrIGJlbG93CiAgICAgIGZsb29kZmlsbChtYXAsIHIsIGMsIGktMSwgaik7IC8vY2hlY2sgYWJvdmUKICAgIH0KCiAgICAvL3ByaW50ZigiJWMiLCBtYXBbaV1bal0pOwoKICAgIH0KCiAgICAvL1NhbWUgcGFyYW1ldGVycyBhcyBmbG9vZGZpbGwKICAgIGludCBjaGVja2xvY2F0aW9uKGNoYXIgbWFwW11bTUFYQysxXSwgaW50IGksIGludCBqLCBpbnQgciwgaW50IGMpIHsKCiAgICAvL3RoZXNlIGlmIHN0YXRlbWVudHMgY2hlY2sgZm9yIHAgaW4gZWFjaCBsb2NhdGlvbiBhcm91bmQgYW5kCiAgICAvL21ha2VzIHN1cmUgdGhlIGNvb3JkaW5hdGUgaXMgaW4gYm91bmRzCiAgICBpZiAoKGktMT49MCkgJiYgKGktMSA8IHIpICYmIChqPj0wKSAmJiAoaiA8IGMpICYmIChtYXBbaS0xXVtqXSA9PSAnUCcpKQogICAgICAgIHJldHVybiAxOwoKICAgIGVsc2UgaWYgKChpKzE+PTApICYmIChpKzEgPCByKSAmJiAoaj49MCkgJiYgKGogPCBjKSAmJiAobWFwW2krMV1bal0gPT0gJ1AnKSkKICAgICAgICByZXR1cm4gMTsKCiAgICBlbHNlIGlmICgoaT49MCkgJiYgKGkgPCByKSAmJiAoaisxPj0wKSAmJiAoaisxIDwgYykgJiYgKG1hcFtpXVtqKzFdID09ICdQJykpCiAgICAgICAgcmV0dXJuIDE7CgogICAgZWxzZSBpZiAoKGk+PTApICYmIChpIDwgcikgJiYgKGotMT49MCkgJiYgKGotMSA8IGMpICYmIChtYXBbaV1bai0xXSA9PSAnUCcpKQogICAgICAgIHJldHVybiAxOwoKICAgIGVsc2UKICAgICAgICByZXR1cm4gMDsKCiAgICB9