zoukankan      html  css  js  c++  java
  • P1162 填涂颜色

    原题链接 https://www.luogu.org/problemnew/show/P1162

    一道很水很简单搜索题,好吧我还是交了4次才过的......

    说一下简单的思路:

    首先输入n*n的矩阵,包含0和1,存入map数组里;

    然后我们在开一个a数组,可以对它进行如下编译:如果map数组对应的元素为1,则a数组存1,其余的存0;

    for(int i=1;i<=n;i++)
           for(int j=1;j<=n;j++)
               {
               cin>>map[i][j];
               if(map[i][j]==0) a[i][j]=0;
               else a[i][j]=1;
            }

    既然有且仅有一个环形闭合圈,那么我们不妨从头开始搜,搜到一个不为0的数(其实就是墙)就返回,否则就把它染成2(既然没碰到墙,那么肯定在圈外)

    这样一来原先为0的位置就是环形圈内的元素,输出的时候把它改成2就好啦!

    但是......如果一开始的map[1][1]就是1(墙)咋办.......我一开是也忘了这一点,因此WA了3个点.....

    解决的办法就是:

    既然我们开的是一个1~n的n*n矩阵,所以我们再从外面套上一环,即矩阵变为0~n+1的(n+1)*(n+1)矩阵

    这样一来不管你是(1,1),(1,n),(n,1),(n,n)这些角上的元素还是魑魅魍魉妖魔都可以被遍历到啦qaq

    好了,下面上代码:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n,m,map[35][35],a[35][35];
    int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
    void search(int x,int y)
    {
        int i;
        if(x<0||x>n+1||y<0||y>n+1||a[x][y]!=0)   //如果跑出去了或撞墙则返回 
        return ;
        a[x][y]=2;                               //在环形圈外染成2做下标记 
        for(i=0;i<4;i++)                         //向四个方向遍历 
        search(x+dx[i],y+dy[i]);
    }
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
           for(int j=1;j<=n;j++)
               {
               cin>>map[i][j];
               if(map[i][j]==0) a[i][j]=0;       //同样给一个变动数组a做上标记 
               else a[i][j]=1;
            }
        search(0,0);                          //从(0,0)开始遍历 
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
            if(a[i][j]==0) cout<<2<<" ";      //a数组中的0元素就是需要被染成2的地方 
            else cout<<map[i][j]<<" ";        //其他照常输出 
            }
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Webpack的组成部分 半 详解
    代码简洁之道:编写干净的 React Components & JSX
    大体量点位置数据动态聚合Binning可视化效果
    树莓派FRP服务器自启动失败原因及解决办法
    nopCommerce自学笔记(一、环境搭建)-BigIcicle
    NopCommerce4.3中文版资源
    利用阿里云防勒索备份文件->ibdata 和 frm 文件恢复 MySQL 数据库
    ubuntu mysql设置sql_mode
    Ubuntu16.04 中PHP7.0 安装pdo_mysql 扩展
    相邻两个生产计划之间的衔接问题
  • 原文地址:https://www.cnblogs.com/xcg123/p/10744024.html
Copyright © 2011-2022 走看看