基础训练 回形取数

回形取数

/*逆时针读数,但每读过一个就标志已读*/
#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;
}

猜你喜欢

转载自www.cnblogs.com/A-Little-Nut/p/10348806.html
今日推荐