回形取数题

回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下

输入:

输入第一行是两个不超过 200 的正整数 m, n,表示矩阵的行和列。接下来 m 行每行 n 个整数,表示这个矩阵。

输出:

        输出只有一行,共 mn 个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。

该题比较简单

#include<bits/stdc++.h>
using namespace std;
int a[201][201]; //存矩阵
int vis[201][201]; //标记这个坐标的点是否已经取过
int main(){
    int n,m;
    cin >> n >> m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin >> a[i][j];
	int x=1, y=1;
	cout << a[1][1];
	vis[1][1] = 1;     //标记这个坐标点已经取过
	int sum = 1;
	while(sum < n*m){   //下面分别处理上、下、左、右四个方向
	    while(x+1<=n && vis[x+1][y]==0){
	        cout << " " << a[++x][y] ;
	        vis[x][y]=1;
	        sum++;
	    }
	    while(y+1<=m && vis[x][y+1]==0){
	        cout << " " << a[x][++y] ;
	        vis[x][y]=1;
	        sum++;
	    }
	    while(x-1>=1 && vis[x-1][y]==0){
	        cout << " " << a[--x][y] ;
	        vis[x][y]=1;
	        sum++;
	    }
	    while(y-1>=1 && vis[x][y-1]==0){
	        cout << " " << a[x][--y] ;
	        vis[x][y] = 1;
	        sum++;
	    }
}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪八戒1.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值