当前位置: 代码迷 >> C语言 >> 【求助】n×n阶右手旋转方阵
  详细解决方案

【求助】n×n阶右手旋转方阵

热度:312   发布时间:2007-11-23 14:31:34.0
【求助】n×n阶右手旋转方阵
小弟是初学者 望各位大虾指点...  先在此谢过
【求助】n×n阶右手旋转方阵
键盘输入一个正数n(1<=n<=20),输出n×n阶右手旋转方阵。
例如 键盘输入数据4,则输出
1  12  11  10
2  13  16    9
3  14  15    8
4    5    6    7
搜索更多相关的解决方案: 方阵  右手  

----------------解决方案--------------------------------------------------------
#define DOWN  1
#define RIGHT  2
#define UP        3
#define LEFT    4


void ringMatrix(int** M, int N)
{
int i, j, value = 0;
        int direction = DOWN;
//元素都初始化为零
for(i = 0; i < N; i++)
  for(j = 0; j < N; j++)
   M[i][j] = 0;
i = j = 0;
while(true)
{
  switch(direction)
  {
  case DOWN:
   for( ; (i < N) && (M[i][j] == 0); i ++)
    M[i][j] = (++ value);
   if(M[-- i][++ j] != 0)
    return;
   direction = RIGHT;
   break;
  case RIGHT:
   for( ; (j < N) && (M[i][j] == 0); j ++)
    M[i][j] = (++ value);
   if(M[-- i][-- j] != 0)
    return;
   direction = UP;
   break;
  case UP:
   for( ; (i >= 0) && (M[i][j] == 0); i --)
    M[i][j] = (++ value);
   if(M[++ i][-- j] != 0)
    return;
   direction = LEFT;
   break;
  case LEFT:
   for( ; (j >= 0) && (M[i][j] == 0); j --)
    M[i][j] = (++ value);
   if(M[++ i][++ j] != 0)
    return;
   direction = DOWN;
   break;
  }
}

}
----------------解决方案--------------------------------------------------------
编译不能通过啊
我用的是TC
----------------解决方案--------------------------------------------------------
这么还没有人帮帮我啊。。。
而且上段代码  我还有点看不懂。。。
比如  void ringMatrix(int** M, int N)
是什么意思?
----------------解决方案--------------------------------------------------------
而且2楼给的好像不是我讲的意思吧?
至少要让用户输入 n 的大小吧
还有
2楼编的程序 你认真读下
根本和我说要实现的功能不一样啊!!
右手旋转方阵的意思如下图:
----------------解决方案--------------------------------------------------------
呵呵  问题已经解决... ...
----------------解决方案--------------------------------------------------------
  相关解决方案