我正在尝试以螺旋方式打印数组的元素。我可以找出代码中的逻辑错误..
void spiral(int n,int m,int arr[][m])
{
int t=0,r=m-1,b=n-1,l=0,dir=0; /* t->top b->bottom l->left r->right */
int k,j;
// above parameters to manage the matrix.
// exit condition from loop
while (t<=b && l<=r)
{
// print top row
if (dir==0)
{
for (k=l;k<=r;k++)
{
printf("%d ",arr[t][k]);
}
dir=1;
t++;
}
// print right column
else if (dir==1)
{
for (k=t;k<=b;k++)
{
printf("%d ",arr[k][r]);
}
dir=2;
r--;
}
// print bottom row
else if (dir==2)
{
for (k=r;k>=l;k--)
{
printf("%d ",arr[b][k]);
}
dir=3;
b--;
}
// print left column
else if (dir==3)
{
for (k=b;k<=t;k--)
{
printf("%d ",arr[k][l]);
}
dir=0;
l++;
}
}
}
答案 0 :(得分:0)
要完成任务,不需要使用变量dir
并检查其值,因为所有步骤都以相同的顺序重复。
最后一个循环条件中也有错误:k <= t
应为k >= t
。
这是一个可能的工作实现:
void spiral(int n,int m,int arr[][m])
{
int top = 0,
right = m - 1,
bottom = n - 1,
left = 0,
k;
while( top <= bottom && left <= right )
{
//print top row
for ( k = left; k <= right; k++ )
{
printf("%d ",arr[top][k]);
}
++top;
//print right column
for( k = top; k <= bottom; k++ )
{
printf("%d ",arr[k][right]);
}
--right;
//print bottom row
for( k = right; k >= left; k-- )
{
printf("%d ",arr[bottom][k]);
}
--bottom;
//print left column
for( k = bottom; k >= top; k-- )
// this was wrong ^^^^^^ in OP's code
{
printf("%d ",arr[k][left]);
}
++left;
}
}
实例HERE