Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- void left(int size, int spiral[size][size], int x, int y);
- void right(int size, int spiral[size][size], int x, int y);
- void up(int size, int spiral[size][size], int x, int y);
- void down(int size, int spiral[size][size], int x, int y);
- //1 - right
- //2 - down
- //3 - left
- //4 - up
- void output(int size, int spiral[size][size]){
- for (int i = 0; i < size; ++i) {
- for (int j = 0; j < size; ++j) {
- printf("%4d", spiral[i][j]);
- }
- printf("\n");
- }
- }
- void right(int size, int spiral[size][size], int x, int y){
- printf("right start: x %d y %d\n", x, y);
- int turns = 0;
- while(1){
- if(y == size - 1){
- spiral[x][y] = 1;
- break;
- } else if (spiral[x][y + 1] == 1){
- y--;
- break;
- }
- spiral[x][y] = 1;
- y++;
- turns++;
- }
- printf("right end: x %d y %d turns %d\n", x, y, turns);
- output(size, spiral);
- if(turns > 2){
- down(size, spiral, x, y);
- } else {
- return;
- }
- }
- void left(int size, int spiral[size][size], int x, int y){
- printf("left start: x %d y %d\n", x, y);
- int turns = 0;
- while(1){
- if(y == 0){
- spiral[x][y] = 1;
- break;
- } else if(spiral[x][y - 1] == 1){
- y++;
- break;
- }
- spiral[x][y] = 1;
- y--;
- turns++;
- }
- printf("left end: x %d y %d turns %d\n", x, y, turns);
- output(size, spiral);
- if(turns > 2){
- up(size, spiral, x, y);
- } else {
- return;
- }
- }
- void up(int size, int spiral[size][size], int x, int y){
- printf("up start: x %d y %d\n", x, y);
- int turns = 0;
- while(1){
- if(x == -1){
- break;
- } else if(spiral[x - 1][y] == 1){
- break;
- }
- spiral[x][y] = 1;
- x--;
- turns++;
- }
- x++;
- printf("up end: x %d y %d turns %d\n", x, y, turns);
- output(size, spiral);
- if(turns > 2){
- right(size, spiral, x, y);
- } else {
- return;
- }
- }
- void down(int size, int spiral[size][size], int x, int y){
- printf("down start: x %d y %d\n", x, y);
- int turns = 0;
- while(1){
- if(x == size - 1){
- spiral[x][y] = 1;
- break;
- } else if(spiral[x + 1][y] == 1){
- if(turns <= 2){
- return;
- }
- x--;
- break;
- }
- spiral[x][y] = 1;
- x++;
- turns++;
- }
- printf("down end: x %d y %d turns %d\n", x, y, turns);
- output(size, spiral);
- if(turns > 2){
- left(size, spiral, x, y);
- } else {
- return;
- }
- }
- void spiralize (unsigned n, int spiral[n][n]){
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < n; ++j) {
- spiral[i][j] = 0;
- }
- }
- right(n, spiral, 0, 0);
- }
- int main(){
- int array[18][18];
- spiralize(18, array);
- printf("\n");
- output(18, array);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement