zoukankan      html  css  js  c++  java
  • 美团笔试1--螺旋矩阵

    螺旋矩阵

    输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。

    具体矩阵形式可参考样例。

    输入格式

    输入共一行,包含两个整数n和m。

    输出格式

    输出满足要求的矩阵。

    矩阵占n行,每行包含m个空格隔开的整数。

    数据范围

    1n,m100

    输入样例:

    3 3
    

    输出样例:

    1 2 3
    8 9 4
    7 6 5

    定义四个方向
    向右 x不变 y+1
    向下 x+1 y不变
    向左 x不变 y-1
    向上 x-1 y不变

    撞墙的条件 1 走出边界
          2 走到已经被占用的格子
    d=(d+1) mod 4


    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    const int N = 110;
    
    int n, m;
    int res[N][N];
    bool st[N][N];
    
    int main()
    {
        cin >> n >> m;
        
        int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
        
        int x = 0, y = 0, d = 0;
        for (int i = 1; i <= n * m; i ++ )
        {
            int nx = x + dx[d], ny = y + dy[d];
            if (nx < 0 || nx >= n || ny < 0 || ny >= m || st[nx][ny])
            {
                d = (d + 1) % 4;
                nx = x + dx[d], ny = y + dy[d];
            }
            
            res[x][y] = i;
            st[x][y] = true;
            
            x = nx, y = ny;
        }
        
        for (int i = 0; i < n; i ++ )
        {
            for (int j = 0; j < m; j ++ ) cout << res[i][j] << ' ';
            cout << endl;
        }
        
        return 0;
    }
  • 相关阅读:
    UVA 12545 Bits Equalizer
    UVA 1610 Party Games
    UVA 1149 Bin Packing
    UVA 1607 Gates
    UVA 12627 Erratic Expansion
    UVA10562-Undraw the Trees(递归)
    UVA10129-Play on Words(欧拉路径)
    UVA816-Abbott's Revenge(搜索进阶)
    UVA1103-Ancient Messages(脑洞+dfs)
    UVA839-Not so Mobile
  • 原文地址:https://www.cnblogs.com/kelly1895/p/10816101.html
Copyright © 2011-2022 走看看