Как сделать алгоритм зигзага заполнить сетку любого размера, как показано на рисунке ниже?Алгоритм заполнения Zig-zag?
Вот мой алгоритм, который не работает. (Вместо этого, начиная с нижнего левого и верхнего правого угла):
x1 = 0;
y1 = grid_h-1;
var a = 0;
put(x1,y1);
while(!((x1 = grid_w-1) and (y1 = 0))) { //If it isn't at the top right corner
if a = 2 {
x1 += 1;
put(x1,y1);
while(x1 != grid_w-1) { //While x1 isn't at the right
//Go diagonally down
x1 += 1;
y1 += 1;
put(x1,y1);
}
y1 -= 1;
put(x1,y1);
while(y1 != 0) { //While y1 isn't at the top
//Go diagonally up
x1 -= 1;
y1 -= 1;
put(x1,y1);
}
} else if a = 1 {
while(x1 != grid_w-1) { //While x1 isn't at the right
//Go diagonally down
x1 += 1;
y1 += 1;
put(x1,y1);
}
y1 -= 1;
put(x1,y1);
while(y1 != 0) { //While y1 isn't at the top
//Go diagonally up
x1 -= 1;
y1 -= 1;
put(x1,y1);
}
x1 += 1;
put(x1,y1);
} else {
y1 -= 1;
if (y1 = 0) { a = 1; } //At top?
put(x1,y1);
while(y1 != grid_h-1) { //While y1 isn't at the bottom
//Go diagonally down
x1 += 1;
y1 += 1;
put(x1,y1);
}
x1 += 1;
put(x1,y1);
while(x1 != 0) { //While x1 isn't at the left
//Go diagonally up
x1 -= 1;
y1 -= 1;
put(x1,y1);
if (y1 = 0) { a = 2; } //At top?
}
}
}
Простой способ сделать это?
Можете ли вы объяснить, почему в пятом примере (2 высокий, по 3 в ширину) она идет вниз, вверх-вправо, вниз, а не вниз, вверх-вправо, вправо, как это кажется, как она будет основана на другой пример? - Лучше, можете ли вы также однозначно описать, как заполнить этот шаблон? – moreON
Извини, что я плохой. Я хочу, чтобы он заполнялся слева направо вправо по шаблону зигзага с лучшим способом для этого. То, что я знаю, это то, что он идет на один шаг вниз, тогда он поднимается до тех пор, пока он не окажется наверху и так далее. Я не знаю, как переключиться, когда он доберется до угла. –
Мне кажется, что в каком направлении идти, основываясь на краю, на котором вы находитесь? Внизу: идите направо. Справа: спуститесь. Слева: идите вниз. Вверх: идите направо. - оценка этих параметров в этом порядке, каждый раз, когда вы достигаете края, должна работать. Он охватывает углы, гарантируя, что правильный выбор является первым в этих вариантах. – moreON