基础训练 回形取数

回形取数

/*逆时针读数,但每读过一个就标志已读*/
#include<iostream>
#include<vector>
using namespace std;
int main(){
    int m, n, cnt=1, x=0, y=0, flag=0;
    cin>>m>>n;
    vector<vector<int> > M(m, vector<int>(n, 0)), visited(m, vector<int>(n,0));
    for(int i=0; i<m; i++)
        for(int j=0; j<n; j++)
            cin>>M[i][j];
        cout<<M[0][0]; visited[0][0]=1;
    while(cnt<m*n){
        while(x+1<m&&!visited[x+1][y]){
            visited[++x][y]=1; cnt++;
            cout<<" "<<M[x][y];
        }
        while(y+1<n&&!visited[x][y+1]){
            visited[x][++y]=1; cnt++;
            cout<<" "<<M[x][y];
        }
        while(x-1>=0&&!visited[x-1][y]){
            visited[--x][y]=1; cnt++;
            cout<<" "<<M[x][y];
        }
        while(y-1>=0&&!visited[x][y-1]){
            visited[x][--y]=1; cnt++;
            cout<<" "<<M[x][y];
        }
    }
    cout<<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/A-Little-Nut/p/10348806.html

时间: 2024-08-28 23:16:57

基础训练 回形取数的相关文章

[BASIC-25] 回形取数

基础练习 回形取数 时间限制:1.0s   内存限制:512.0MB 问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m行每行n个整数,表示这个矩阵. 输出格式 输出只有一行,共mn个数,为输入矩阵回形取数得到的结果.数之间用一个空格分隔,行末不要有多余的空格. 样例输入 3 3 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 8 9 6

蓝桥杯 基础练习 BASIC-25 回形取数

基础练习 回形取数 时间限制:1.0s   内存限制:512.0MB 问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m行每行n个整数,表示这个矩阵. 输出格式 输出只有一行,共mn个数,为输入矩阵回形取数得到的结果.数之间用一个空格分隔,行末不要有多余的空格. 样例输入 3 31 2 34 5 67 8 9 样例输出 1 4 7 8 9 6 3

C语言 &#183; 回形取数

基础练习 回形取数 时间限制:1.0s   内存限制:512.0MB 问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m行每行n个整数,表示这个矩阵. 输出格式 输出只有一行,共mn个数,为输入矩阵回形取数得到的结果.数之间用一个空格分隔,行末不要有多余的空格. 样例输入 3 31 2 34 5 67 8 9 样例输出 1 4 7 8 9 6 3

基础练习 回形取数

问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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

[蓝桥杯][基础练习VIP]回形取数

时间限制: 1Sec 内存限制: 128MB 提交: 128 解决: 34 题目描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入 输入第一行是两个不超过200的正整数m,  n,表示矩阵的行和列.接下来m行每行n个整数,表示这个矩阵. 输出 输出只有一行,共mn个数,为输入矩阵回形取数得到的结果.数之间用一个空格分隔,行末不要有多余的空格. 样例输入 3 3 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 8 9 6

回形取数

问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下.输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m行每行n个整数,表示这个矩阵.输出格式 输出只有一行,共mn个数,为输入矩阵回形取数得到的结果.数之间用一个空格分隔,行末不要有多余的空格.样例输入3 31 2 34 5 67 8 9样例输出1 4 7 8 9 6 3 2 5样例输入3 21 23 45 6样例输出1 3 5 6 4 2我设计了三种算

hdu 1565 方格取数(2)(网络流之最大点权独立集)

题目链接:hdu 1565 方格取数(2) 题意: 有一个n*m的方格,每个方格有一个数,现在让你选一些数.使得和最大. 选的数不能有相邻的. 题解: 我们知道对于普通二分图来说,最大独立点集 + 最小点覆盖集 = 总点数,类似的,对于有权的二分图来说,有: 最大点权独立集 + 最小点权覆盖集 = 总点权和, 这个题很明显是要求 最大点权独立集 ,现在 总点权 已知,我们只要求出来 最小点权覆盖集 就好了,我们可以这样建图, 1,对矩阵中的点进行黑白着色(相邻的点颜色不同),从源点向黑色的点连一

HDU 3657 Game(取数 最小割)经典

Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1065    Accepted Submission(s): 449 Problem Description onmylove has invented a game on n × m grids. There is one positive integer on each g

HDU 1569 - 方格取数(2) - [最大点权独立集与最小点权覆盖集]

嗯,这是关于最大点权独立集与最小点权覆盖集的姿势,很简单对吧,然后开始看题. HDU1569: Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description 给你一个m*n的格子的棋盘,每个格子里面有一个非负数.从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取数所在的2个格子不能相邻,并且取出的数的和最大. Input 包括多个测试实例,