回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
输入格式
输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输出格式
输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7 8 9 6 3 2 5
#include<stdio.h>
int m,n,a[200][200]={0},b[200][200]={0},s=0,num=0;
void solve(int i,int j)
{
if(b[i][j]==0&&i>=0&&j>=0&&i<m&&j<n)
{
printf("%d ",a[i][j]);
num++;
if(num==m*n) return;
b[i][j]==1;
if(s%4==1)solve(i,++j);
if(s%4==2)solve(--i,j);
if(s%4==3)solve(i,--j);
if(s%4==0)solve(++i,j);
}
else
{
s++;
if(s%4==1) solve(--i,++j);
if(s%4==2) solve(--i,--j);
if(s%4==3) solve(++i,--j);
if(s%4==0) solve(++i,++j);
}
}
int main()
{
scanf("%d%d",&m,&n);
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
solve(0,0);
return 0;
}
我在函数void型函数里面用了return 想要跳出函数 不知为何结果是死循环