prelude618
BAN USERIf this question is including diagonal cases like the description above, the correct answer of that example above should be 3, not 4.
#include <stdio.h>
#define MAX_X 4
#define MAX_Y 5
#define MAX_MEMO 20
void main(){
int i, j=0, k=0, x, y, landnum=0, findflag=1, jm=0;
int memo_x[MAX_MEMO] = { 0, };
int memo_y[MAX_MEMO] = { 0, };
int memo_d[MAX_MEMO] = { 0, };
int land[MAX_X][MAX_Y] = { { 1, 0, 1, 0, 1 },
{ 0, 1, 0, 1, 0 },
{ 1, 0, 1, 0, 0 },
{ 1, 0, 1, 0, 1 } };
x = 0, y = 0;
for (i = 0;;i++){
if (land[x][y] >= 1){
if (findflag == 1){
memo_x[k] = x;
memo_y[k] = y;
memo_d[k] = jm;
jm = 0;
}
else{
jm = memo_d[k+1] + 1;
}
for (j = jm; j < 8; j++){
if (j == 0){
if (x == 0){
findflag = 0;
continue;
}
else {
if (land[x - 1][y] == 1){
land[x][y] = 2;
x = x - 1;
findflag = 1;
k++;
break;
}
else{
findflag = 0;
continue;
}
}
}
if (j == 1){
if ((x == 0)||(y==(MAX_Y-1))){
findflag = 0;
continue;
}
else {
if (land[x - 1][y+1] == 1){
land[x][y] = 2;
x = x - 1;
y = y + 1;
findflag = 1;
k++;
break;
}
else{
findflag = 0;
continue;
}
}
}
if (j == 2){
if (y == (MAX_Y-1)){
findflag = 0;
continue;
}
else {
if (land[x][y+1] == 1){
land[x][y] = 2;
y = y + 1;
findflag = 1;
k++;
break;
}
else{
findflag = 0;
continue;
}
}
}
if (j == 3){
if ((x == (MAX_X-1)) || (y == (MAX_Y-1))){
findflag = 0;
continue;
}
else {
if (land[x + 1][y + 1] == 1){
land[x][y] = 2;
x = x + 1;
y = y + 1;
findflag = 1;
k++;
break;
}
else{
findflag = 0;
continue;
}
}
}
if (j == 4){
if (x == (MAX_X-1)){
findflag = 0;
continue;
}
else {
if (land[x + 1][y] == 1){
land[x][y] = 2;
x = x + 1;
findflag = 1;
k++;
break;
}
else{
findflag = 0;
continue;
}
}
}
if (j == 5){
if ((x == (MAX_X-1)) || (y == 0)){
findflag = 0;
continue;
}
else {
if (land[x + 1][y-1] == 1){
land[x][y] = 2;
x = x + 1;
y = y - 1;
findflag = 1;
k++;
break;
}
else{
findflag = 0;
continue;
}
}
}
if (j == 6){
if (y == 0){
findflag = 0;
continue;
}
else {
if (land[x][y-1] == 1){
land[x][y] = 2;
y = y - 1;
findflag = 1;
k++;
break;
}
else{
findflag = 0;
continue;
}
}
}
if (j == 7){
if ((x == 0) || (y == 0)){
findflag = 0;
continue;
}
else {
if (land[x - 1][y - 1] == 1){
land[x][y] = 2;
x = x - 1;
y = y - 1;
findflag = 1;
k++;
break;
}
else{
findflag = 0;
continue;
}
}
}
}
jm = j;
if (findflag == 0){
land[x][y] = 0;
if (k == 0){
jm = 0;
landnum++;
}
else{
k--;
x = memo_x[k];
y = memo_y[k];
jm = memo_d[k];
}
}
}
else{
if (k == 0){
if ((y + 1) == MAX_Y){
if ((x + 1) == MAX_X){
break;
}
else {
y = 0;
x++;
}
}
else y++;
}
}
}
printf("%d\n", landnum);
return;
}
- prelude618 January 16, 2016