#include #include #define WHMAX (100) #define GUARD (9999) int spos; int stack[WHMAX*WHMAX+100]; int board[WHMAX+5][WHMAX+5]; int board2[WHMAX+5][WHMAX+5]; int saiki(int nx, int ny, int num, int cnt){ int i, ret = 0; int px[] = {-1, 0, 1, 0}; int py[] = { 0,-1, 0, 1}; board2[ny][nx] = cnt; board[ny][nx] = 0; for(i=0;i<4;i++){ int next = board2[ny+py[i]][nx+px[i]]; if(next == (board2[ny][nx]-1)){continue;} if(next != 0){ ret = 1; break; } if(board[ny+py[i]][nx+px[i]] == GUARD){continue;} if(board[ny+py[i]][nx+px[i]] == num){ // printf("%d %d %d %d %d %d \n", nx, ny, nx+px[i], ny+py[i], num, next, cnt); ret = saiki(nx+px[i], ny+py[i], num, cnt+1); } if(ret == 1){ break; } } return ret; } int main(void){ int i,j,W,H; int ret=0; for(i=0;i