#include <stdio.h>
const int n =4;
int data[n][n] = {
{3,3,2,5},
{2,3,3,5},
{1,1,3,1},
{2,3,3,2}
};
int dirs[4][2] = { {-1,0},{0,1},{1,0},{0,-1} };
int *way=NULL;
int way_cnt = 0;
int in_way (int r,int c) {
for (int i=0; i<way_cnt; i+=2) if (way[i]==r && way[i+1]==c) return 1;
return 0;
}
void push_in_way (int r,int c) { way[way_cnt++] = r; way[way_cnt++] = c; }
int s (int seed,int r,int c) {
if (r<0 || r>n-1 || c<0 || c>n-1 || data[r][c]!=seed) return 0;
else {
int cnt = 1;
for (int dir=0; dir<4; dir++)
if (!in_way(r+dirs[dir][0],c+dirs[dir][1])) {
push_in_way (r+dirs[dir][0],c+dirs[dir][1]);
cnt+=s(seed,r+dirs[dir][0],c+dirs[dir][1]);
}
return cnt;
}
}
int main(){
int seed_row = 3, seed_col = 1;
way = new int [(n*n+4*n+4)*2];
if (way == NULL) return -1;
for (int i=0; i<n*n*2; i++) way[i]=-1;
way_cnt = 0;
printf ("\nSeed data = %d",data[seed_row][seed_col]);
push_in_way (seed_row,seed_col);
printf ("\nN=%d",s(data[seed_row][seed_col],seed_row,seed_col));
fflush (stdin);
getchar ();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgpjb25zdCBpbnQgbiA9NDsKaW50IGRhdGFbbl1bbl0gPSB7CiB7MywzLDIsNX0sCiB7MiwzLDMsNX0sCiB7MSwxLDMsMX0sCiB7MiwzLDMsMn0KIH07CgppbnQgZGlyc1s0XVsyXSA9IHsgey0xLDB9LHswLDF9LHsxLDB9LHswLC0xfSB9OwoKaW50ICp3YXk9TlVMTDsKaW50IHdheV9jbnQgPSAwOwoKaW50IGluX3dheSAoaW50IHIsaW50IGMpIHsKIGZvciAoaW50IGk9MDsgaTx3YXlfY250OyBpKz0yKSBpZiAod2F5W2ldPT1yICYmIHdheVtpKzFdPT1jKSByZXR1cm4gMTsKIHJldHVybiAwOwp9Cgp2b2lkIHB1c2hfaW5fd2F5IChpbnQgcixpbnQgYykgeyB3YXlbd2F5X2NudCsrXSA9IHI7IHdheVt3YXlfY250KytdID0gYzsgfQoKaW50IHMgKGludCBzZWVkLGludCByLGludCBjKSB7CiBpZiAocjwwIHx8IHI+bi0xIHx8IGM8MCB8fCBjPm4tMSB8fCBkYXRhW3JdW2NdIT1zZWVkKSByZXR1cm4gMDsKIGVsc2UgewogIGludCBjbnQgPSAxOwogIGZvciAoaW50IGRpcj0wOyBkaXI8NDsgZGlyKyspCiAgaWYgKCFpbl93YXkocitkaXJzW2Rpcl1bMF0sYytkaXJzW2Rpcl1bMV0pKSB7CiAgIHB1c2hfaW5fd2F5IChyK2RpcnNbZGlyXVswXSxjK2RpcnNbZGlyXVsxXSk7CiAgIGNudCs9cyhzZWVkLHIrZGlyc1tkaXJdWzBdLGMrZGlyc1tkaXJdWzFdKTsKICB9CiAgcmV0dXJuIGNudDsKIH0KfQoKaW50IG1haW4oKXsKIGludCBzZWVkX3JvdyA9IDMsIHNlZWRfY29sID0gMTsKCiB3YXkgPSBuZXcgaW50IFsobipuKzQqbis0KSoyXTsKIGlmICh3YXkgPT0gTlVMTCkgcmV0dXJuIC0xOwogZm9yIChpbnQgaT0wOyBpPG4qbioyOyBpKyspIHdheVtpXT0tMTsKIHdheV9jbnQgPSAwOwoKIHByaW50ZiAoIlxuU2VlZCBkYXRhID0gJWQiLGRhdGFbc2VlZF9yb3ddW3NlZWRfY29sXSk7CgogcHVzaF9pbl93YXkgKHNlZWRfcm93LHNlZWRfY29sKTsKIHByaW50ZiAoIlxuTj0lZCIscyhkYXRhW3NlZWRfcm93XVtzZWVkX2NvbF0sc2VlZF9yb3csc2VlZF9jb2wpKTsKIGZmbHVzaCAoc3RkaW4pOwogZ2V0Y2hhciAoKTsKIHJldHVybiAwOwp9