正文

生成n阶螺旋方阵2006-07-17 11:09:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/boxer/16636.html

分享到:

void Matrix(int n)
{
 int  row = 0, col = 0; // 当前位置所在的行列
 int  left = -1, right = n, top = -1, bottom = n; // 当前的边界
 int  irow = 0, icol = 1; // 当前的前进方向(初始时往右)
 int  arr[20][20];

 for(int i=0; i<n*n; ++i)
 {
  arr[row][col] = i+1;

  // 根据当前的前进方向获得下一个位置的行列号
  row += irow; 
  col += icol;

  if(col == right)
  {
   // 下一个位置是右边界时,往下。
   irow = 1;
   icol = 0;

   // 此时,顶边界往下一格
   top += 1;

   // 改变下一个位置
   row += 1;
   col -= 1;
  }
  if(row == bottom)
  {
   // 下一个位置是底边界时,往左。
   irow = 0;
   icol = -1;

   // 此时,右边界往左一格
   right -= 1;

   // 改变下一个位置
   row -= 1;
   col -= 1;
  }
  if(col == left)
  {
   // 下一个位置是左边界时,往上。
   irow = -1;
   icol = 0;

   // 此时,底边界往上一格
   bottom -= 1;

   // 改变下一个位置
   row  -= 1;
   col  += 1;
  }
  if(row == top)
  {
   // 下一个位置是顶边界时,往右。
   irow = 0;
   icol = 1;

   // 此时,左边界往右一格
   left += 1;

   // 改变下一个位置
   row += 1;
   col += 1;
  }
 }

 for(i=0; i<n; ++i)
 {
  for(int j=0; j<n; ++j)
   printf("%4d", arr[i][j]);
  printf("\n");
 }
 printf("\n");
}

阅读(3929) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册