• 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;
    }
  • 相关阅读:
    字符串(String)的创建,以及字符串的属性及方法
    javascript的对象、类和方法
    画布 canvas 的相关内容
    数组的创建,及数组的方法
    css的字体单位
    html中如何清除浮动
    配置adb环境变量连接模拟器安装软件及卸载
    Robot Framework环境搭建步骤
    搭建robotframwork+selenium2library自动化测试环境,简称RFS
    图像界面还原备份mysql
  • 原文地址:https://www.cnblogs.com/xcg123/p/10744024.html
Copyright © 2020-2023  润新知