版权声明:转载请注明出处~~~ https://blog.csdn.net/lesileqin/article/details/88749835
回形取数
题目描述
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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
解决问题的时候遇到的问题:
还是太粗心,因为题目是m行n列,看错题了,直接贡献一次WA。
代码如下:
#include<iostream>
using namespace std;
int m,n; //mhang n lie
int num[200][200];
bool book[200][200]={false};
int main()
{
cin >> m >> n;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin >> num[i][j];
int x=0,y=0;
int ans=m*n;
int flag=0;
while(1)
{
if(flag==ans)
break;
while(x>=0&&x<m&&book[x][y]==false)
{
book[x][y]=true;
cout << num[x][y] << " ";
flag++;
x++;
}
// cout << x << endl;
x--,y++;
while(y>=0&&y<n&&book[x][y]==false)
{
book[x][y]=true;
cout << num[x][y] << " ";
flag++;
y++;
}
y--,x--;
while(x>=0&&x<m&&book[x][y]==false)
{
book[x][y]=true;
cout << num[x][y] << " ";
flag++;
x--;
}
x++,y--;
while(y>=0&&y<n&&book[x][y]==false)
{
book[x][y]=true;
cout << num[x][y] << " ";
flag++;
y--;
}
y++,x++;
// cout << flag << endl;
}
return 0;
}