首页 > 其他分享 >二维数组和坐标系的对应关系

二维数组和坐标系的对应关系

时间:2024-03-02 15:55:52浏览次数:21  
标签:int sum st ++ 二维 maxn 数组 include 坐标系

题目链接
城堡问题
这题需要你在二维数组上建立坐标系,并找出上下作用分别对应\((x,y)\)的变化关系。

对应关系

-----------> y
|
|
|
\/
x

Code

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>

using namespace std;

const int N = 60;

typedef pair<int, int> PII;

int n, m;
int w[N][N];
bool st[N][N];

// 1表示西墙,2表示北墙,4表示东墙,8表示南墙

// x垂直
int dx[4] = {0, -1, 0, 1};  // 分别对应 西 北 东 南
int dy[4] = {-1, 0, 1, 0};


int cnt, maxn;

int dfs(int fx, int fy)
{
    queue<PII> q;
    q.push({fx, fy});
    st[fx][fy] = true;
    
    int sum = 1;
    
    while(q.size())
    {
        auto [a, b] = q.front();    q.pop();
        for(int i = 0; i < 4; i ++ )    // 2^0  2^1  2^2 2^3
        {
            int x = a + dx[i], y = b + dy[i];
            
            if(x < 0 || x >= n || y < 0 || y >= m || st[x][y])  continue;   // 越界 or 已经访问过
            if(w[a][b] >> i & 1)    continue;   // 有墙
            
            q.push({x, y});
            st[x][y] = true;
            sum ++ ;
        }
    }
    return sum;
}

int main()
{
    cin >> n >> m;
    
    for(int i = 0; i < n; i ++ )
        for(int j = 0; j < m; j ++ )
            cin >> w[i][j];
    
    for(int i = 0; i < n; i ++ )
        for(int j = 0; j < m; j ++ )
            if(!st[i][j])
            {
                maxn = max(maxn, dfs(i, j));
                cnt ++ ;
            }
    
    cout << cnt << endl << maxn << endl;
    
    return 0;
}

标签:int,sum,st,++,二维,maxn,数组,include,坐标系
From: https://www.cnblogs.com/ALaterStart/p/18048719

相关文章

  • (33/60)K次取反后最大化的数组和、加油站、分发糖果
    K次取反后最大化的数组和leetcode:1005.K次取反后最大化的数组和贪心法思路两次贪心:(每次取反k--)排序,一次遍历,按绝对值从大到小地把负数取反。如果K次取反没用完,再排序一次,反复取反最小元素。(或者一开始就按绝对值从大到小排序,只需排序一次)复杂度分析时间复杂度:O(Nlo......
  • C++ 指针 vs 数组
    指针和数组并不是完全互换的1#include<iostream>23usingnamespacestd;4constintMAX=3;56intmain()7{8intvar[MAX]={10,100,200};910for(inti=0;i<MAX;i++)11{12*var=i;//这是正确的语法13......
  • 树状数组模板
    单修区查【模板】树状数组1题目描述如题,已知一个数列,你需要进行下面两种操作:将某一个数加上$x$求出某区间每一个数的和输入格式第一行包含两个正整数$n,m$,分别表示该数列数字的个数和操作的总个数。第二行包含$n$个用空格分隔的整数,其中第$i$个数字表示数列......
  • 代码随想录算法训练营第三十三天 | 135. 分发糖果, 134. 加油站, 1005.K次取反后最大化
      1005.K次取反后最大化的数组和 已解答简单 相关标签相关企业 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。重复这个过程恰好 k 次。可以多次选择同一个下......
  • 代码随想录算法训练营第三十三天| ● 1005.K次取反后最大化的数组和 ● 134. 加油站
    K次取反后最大化的数组和 题目链接:1005.K次取反后最大化的数组和-力扣(LeetCode)思路:首先增序排序,然后依次将负值取反,如果负数先用完,则再排序一次,将最小的正数取反之后求和;如果k先用完,直接求和。注意sort默认是增序排序,若想要要降序,则不能使用sort(nums.end(),nums.begin())......
  • JAVA基础:引用类型参数传递的相关案例(数组的传递) 方法重载 return关键字
    packagecom.itheima.Method;publicclassMethod6{publicstaticvoidmain(String[]args){int[]arrs=newint[]{2,5,6,4};printArray(arrs);}publicstaticvoidprintArray(int[]arr){if(arr!=null){System.out......
  • 在Keil中要将数组加载到指定的内存中
    在进行屏幕驱动移植时,源码中有一段这样的代码uint16_tltdc_lcd_framebuf[800][480]__attribute__((at(LCD_FRAME_BUF_ADDR)));在该工程下编译非常顺利,也不会提示有错误,但是在我自己新建的工程中使用就会出现错误提示,编译也不通过,提示.\Objects\GD32F470.axf:Error:L6406E......
  • 数组对象删除不满足某些条件的对象 js
    recursiveFunction(items,childrenNodeName,ids){console.log('items',ids);//获取数组长度if(items)items=[];letlen=items?.length//循环遍历数组for(leti=0;i<len;i++){//如果有子节点,递归遍历......
  • 树状数组学习笔记
    目录原理(结构)建树应用单点修改,区间求和区间修改,单点求值区间修改,区间求和单点修改,区间求最值求逆序对个数二维树状数组trick:树状数组上倍增权值树状数组正文1.原理引用日报图片。设黑色框内数组为\(a_1\toa_8\).可以推得\(c_i=a_......
  • 【C++】相对于数组,在链表中添加和删除元素更容易,但排序速度更慢。这就引出了一种可能
    相对于数组,在链表中添加和删除元素更容易,但排序速度更慢。这就引出了一种可能性:相对于使用链表算法进行排序,将链表复制到数组中,对数组进行排序,再将排序后的结果复制到链表中的速度可能更快;但这也可能占用更多的内存。请使用如下方法检验上述假设。a.创建大型vector<int>对象vi0,并......