|
发表于 2018-12-6 09:09:06
|
显示全部楼层
本楼为最佳答案
 - #include <stdio.h>
- #include <stdlib.h>
- typedef struct move_direction {
- int x;
- int y;
- struct move_direction *next_direction;
- }dir;
- int main()
- {
- //定义移动的四个方向
- dir down, up, left, right;
- //定义当前的方向
- dir *now_dir = &right;
- down.x = 1; down.y = 0; down.next_direction = &left;
- up.x = -1; up.y = 0; up.next_direction = &right;
- left.x = 0; left.y = -1; left.next_direction = &up;
- right.x = 0; right.y = 1; right.next_direction = &down;
- printf("请输入方针阶数:");
- int n, k, i, j;
- int i_add = 1, j_add = 1;
- int mode = 1;//mode代表模式,1为横向移动,0为纵向移动
- scanf("%d", &n);
- //动态申请n*n大小的内存
- int **arr = (int**)malloc(sizeof(int*)*n);
- for (k = 0; k < n; k++)
- arr[k] = (int*)malloc(sizeof(int*)*n);
- //初始化n*n方针
- for (i = 0; i < n; i++)
- for (j = 0; j < n; j++)
- arr[i][j] = 0;
- //
- k = 1; i = 0; j = 0;
- while (k <= n * n)
- {
- arr[i][j] = k++;
- i += (*now_dir).x;
- j += (*now_dir).y;
- if (j < n&&j >= 0&&i<n&&i>=0 && arr[i][j] == 0);//正常情况不做处理
- else//超出边界或者已经有数
- {
- //回退
- i -= (*now_dir).x;
- j -= (*now_dir).y;
- now_dir = now_dir->next_direction;
- i += (*now_dir).x;
- j += (*now_dir).y;
- }
- }
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n; j++)
- printf("%5d ", arr[i][j]);
- printf("\n");
- }
- }
复制代码 |
|