首页 > 其他分享 >洛谷 P1162 填涂颜色

洛谷 P1162 填涂颜色

时间:2024-06-16 14:10:19浏览次数:25  
标签:dpoint 填涂 洛谷 point int second mp P1162 first

题目链接:填涂颜色



思路

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 30 + 10;
#define ll long long

int mp[N][N], dir[5][2] = {
    { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } 
}, n;
bool vis[N][N];

bool check(int x, int y) {
  return x >= 0 && x <= n + 1 && y >= 0 && y <= n + 1;
}

bool BFS(int x, int y) {
  queue<pair<int, int>> q;
  q.push({x, y});

  while (!q.empty()) {
    pair<int, int> point = q.front();
    q.pop();
    for (int i = 0; i < 4; i++) {
      pair<int, int> dpoint = point;
      dpoint.first = point.first + dir[i][0];
      dpoint.second = point.second + dir[i][1];
      if (check(dpoint.first, dpoint.second)) {
        if (mp[dpoint.first][dpoint.second] == 0) {
          mp[dpoint.first][dpoint.second] = 3;
          q.push(dpoint);
        }
      }
    }
  }
  return true;
}
int main() {
  cin >> n;

  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      cin >> mp[i][j];
    }
  }

  BFS(0, 0);

  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      if (mp[i][j] == 3) {
        cout << 0 << " ";
      } else if (mp[i][j] == 0) {
        cout << 2 << " ";
      } else {
        cout << 1 << " ";
      }
    }
    cout << endl;
  }

  return 0;
}

标签:dpoint,填涂,洛谷,point,int,second,mp,P1162,first
From: https://www.cnblogs.com/againss/p/18250580

相关文章

  • 洛谷 P1216 数字三角形
    题目链接:数字三角形思路    dp:金字塔顶的元素为起点,金字塔每行的最左侧数字只能从上一层的最左侧数字到达,如7->3->8->2->4,这些数字中的每一个(除起点7外)都只能从上一层的最左侧数字到达,递推公式为dp[i][1]=max(dp[i][1],num[i][1]+dp[i-1][1],最右侧数字......
  • 洛谷 P4343 自动刷题机
    题目链接:自动刷题机思路    二分典题,两个二分判断出可能的最大值和最小值。需要注意当删掉y行代码后,当前代码行数小于0时需要将代码行数重新赋值为0,然后需要注意二分的n最大值的边界,因为x[i]的最大值为1e9,日志最多有1e5行,所以考虑极限情况,日志每一行都是写了1e9行代码,......
  • 洛谷 P1226 快速幂
    题目链接:快速幂思路    简单快速幂模板。a^17=(a^2)^8*a,此时pow()中的y就可以视为17->8(y>>=1),pow()中的x就是底数a->a^2(x*=x),结果res可以视为在循环时多出来的后边乘的a,1->a(res*=x),简单代数推导就会发现y=1的时候,会有res*=x此时的x为a^16,则......
  • 洛谷 P5595 歌唱比赛
    题目链接:歌唱比赛思路    根据题目分析可得,假如小x的点赞数是123111,小y的点赞数是234111,则字符串的第4为到第6位结果都为Z,分别为对比(111,111),(11,11),(1,1),字符串的第三位为Y,为对比(3111,4111),则结果字符串为YYYZZZ。    此时可以轻易判断出字符串中第一个Z后面的所有字母......
  • 洛谷P8807 [蓝桥杯 2022 国 C] 取模
    题目:解读(思路与分析):题目总结:对于给定的整数n和范围m,要找到两个不同的x和y,它们除以n后的余数相等。思路:对于每组给出的n,m询问,可以通过遍历范围从1到m的所有可能的j,并计算n对j取模的余数。使用一个集合来存储已经出现过的余数,如果当前余数已经存在于集......
  • 洛谷 P2015 二叉苹果树
    题目链接:二叉苹果树思路    本题使用链式向前星存储树上的边,然后DFS搜索+简单dp。    dp数组,dp[i][j]表示节点i及其子树保留k根树枝得到的最大苹果数。son数组存储当前节点的孩子节点的编号和当前节点与孩子节点之间的树枝上的苹果个数。    对于dp递......
  • 洛谷 P1352 没有上司的舞会
    题目链接:没有上司的舞会思路题解#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintN=1e5+10;intdp[N][2],happy[N],subordinate[N],cnt,head[N],nex[N],edge[N];//链式向前星存储边voidadd(intx,inty){nex[++cnt]=......
  • 洛谷 P1219 八皇后
    题目链接:八皇后思路    这是一个典型的搜索题目,从前往后依次枚举行数,从第一行开始依次枚举皇后的纵坐标,并判断当前坐标是否满足题目要求,满足题目要求则标记将答案存储,并继续向下枚举下一行。由分析可得每条对角线上的任意一点的横纵坐标满足公式i-j+n的值与对角......
  • 洛谷P1601 A+B Problem(高精)
    #include<iostream>#include<string>#include<cstring>#include<cstdio>usingnamespacestd;constintN=1005;structbign{intlen,s[N];bign(){memset(s,0,sizeof(s));len=1;}bign(intnum){*this=num;}......
  • 子集和加总问题(从洛谷博客同步)
    给出\(\{a_{1\dotsn}\}\),找出一个子集和为\(0\)。这是NPC的,当\(|a_i|\leqn\)的时候可以\(n^3\)背包,当然地可以使用bitset压位至\(\frac{n^3}w\)。值域还是太难受了,考虑怎么压下来值域,因为和为\(0\),值域又是\(n\),通过调整顺序总是存在一种方案使得值域在\([-......