顺时针蛇形输出
大模拟
#include <stdio.h>
#define INF 10005
int main()
{
freopen("1.out","w+",stdout);
int matrix[100][100];
int m;
int n;
scanf("%d%d", &m, &n);
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
scanf("%d", &matrix[i][j]);
}
}
int i = 0, j = 0;
int dir = 0; // 0 right, 1 down, 2 left, 3 up
while (matrix[i][j] != INF
|| (i-1>=0 && matrix[i-1][j]!=INF)
|| (i+1<m && matrix[i+1][j]!=INF)
|| (j-1>=0 && matrix[i][j-1]!=INF)
|| (j+1<n && matrix[i][j+1]!=INF ))
{
switch (dir)
{
case 0: // right
for (; j < n && matrix[i][j] != INF; j++)
{
printf("%d", matrix[i][j]);
matrix[i][j] = INF;
if (j+1 < n && matrix[i][j+1]!=INF) // j+1 < n && matrix[i][j+1]!=INF
{
printf(" ");
}
}
dir = 1;
j--;
if (i+1<m && matrix[i+1][j]!=INF) // i+1<m && matrix[i+1][j]!=INF
{
printf(" ");
}
i++;
break;
case 1: // down
for (; i < m && matrix[i][j] != INF; i++)
{
printf("%d", matrix[i][j]);
matrix[i][j] = INF;
if (i+1<m&&matrix[i+1][j]!=INF)//i+1<m&&matrix[i+1][j]!=INF
{
printf(" ");
}
}
dir = 2;
i--;
if (j-1>=0 && matrix[i][j-1]!=INF) // j-1>=0 && matrix[i][j-1]!=INF
{
printf(" ");
}
j--;
break;
case 2: // left
for (; j >= 0 && matrix[i][j] != INF; j--)
{
printf("%d", matrix[i][j]);
matrix[i][j] = INF;
if (j-1>=0 && matrix[i][j-1] !=INF) //j-1>=0 && matrix[i][j-1] !=INF
{
printf(" ");
}
}
dir = 3;
j++;
if (i-1>=0 && matrix[i-1][j]!=INF) // i-1>=0 && matrix[i-1][j]!=INF
{
printf(" ");
}
i--;
break;
case 3: // up
for (; i >= 0 && matrix[i][j] != INF; i--)
{
printf("%d", matrix[i][j]);
matrix[i][j] = INF;
if (i-1>=0 && matrix[i-1][j]!=INF) // i-1>=0 && matrix[i-1][j]!=INF
{
printf(" ");
}
}
dir = 0;
i++;
if (j+1<n && matrix[i][j+1]!=INF)//j+1<n && matrix[i][j+1]!=INF
{
printf(" ");
}
j++;
break;
default:
break;
}
}
return 0;
}