刷清橙OJ--A1068.回形取数

来源:互联网 发布:淘宝固本安宫止血汤 编辑:程序博客网 时间:2024/06/05 20:00
问题:
A1068. 回形取数
时间限制:1.0s   内存限制:512.0MB  
总提交次数:3132   AC次数:1137   平均分:64.37
问题描述
  回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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
样例输入
3 2
1 2
3 4
5 6
样例输出
1 3 5 6 4 2
代码:
#include<iostream>#include<string.h>using namespace std;int a[201][201],b[201][201];int n,m;int size = 0;int num = 0; int dfs(int x,int y){if(x>=n||y>=m||b[x][y] == 1||x<0||y<0){size = (size+1)%4;return 0;}else{cout<<a[x][y]<<' ';b[x][y] = 1;num++;}while(num != n*m){if(size == 0){dfs(x+1,y);}if(size == 1){dfs(x,y+1);}if(size == 2){dfs(x-1,y);}if(size == 3){dfs(x,y-1);}}return 0;} int main(){int i,j;memset(b,sizeof(b),0);cin>>n>>m;for(i=0;i<n;i++){for(j=0;j<m;j++){cin>>a[i][j];}}dfs(0,0);return 0;}

个人想法:代码来自试题讨论