• P1162填涂颜色


    这还是一个搜索题,难度较低,但我提交第三次才AC..

    观察0地图左上角的上面和左面都是一,所以先把他找粗来,然后设成start,然后dfs找到与他联通的块,涂成2即可。再说一下自己犯的低级错误:1.当找到坐上角时,必须先break掉里面的for,然后bool变量必须放在第一个for的里面,但我放在了上面,,,2.找到开始坐标后先打上标记。3.忘记加dfs(tx,ty)了

    1.预处理正确性需要保证,低级错误要手动避免

    2.再去练习难度较大的搜索题目

    3.寻找好条件的客观规律,然后去解决

    4.提交的时候别自信满满,静下心来想一想,noip上是黑盒!

    代码

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int n;
    int mp[40][40],book[40][40];
    int dx[4]={0,-1,0,1};
    int dy[4]={1,0,-1,0};
    int startx,starty;
    bool flag=true;
    void dfs(int x,int y){
        for(int k=0;k<=3;k++){
            int tx=dx[k]+x;
            int ty=dy[k]+y;
            if(mp[tx][ty]==0&&tx>=1&&ty>=1&&tx<=n&&ty<=n&&book[tx][ty]==0){
                book[tx][ty]=1;
                mp[tx][ty]=2;
                dfs(tx,ty);
            }
            else continue;
        }
        return;
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                scanf("%d",&mp[i][j]);
                book[i][j]=0;
            }
        }
        mp[1][0]=6;
        mp[0][1]=6;    
        for(int i=1;i<=n;i++){
            if(flag==true){
                for(int j=1;j<=n;j++){
                    if(mp[i][j]==0){
                        if(mp[i-1][j]==1&&mp[i][j-1]==1){
                        startx=i;
                        starty=j;
                        flag=false;
                        break;
                        }
                    }
                }
            }    
        }
        //cout<<endl;
        //cout<<startx<<starty;
        dfs(startx,starty);
        mp[startx][starty]=2;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                cout<<mp[i][j]<<" ";
            }
        cout<<endl;
        }        
        return 0;
    }
  • 相关阅读:
    类 7.2访问控制与封装 笔记
    第七章 类(class)7.1 笔记
    10.4.3反向迭代器Reverse_iterator笔记
    10.4再探迭代器笔记
    10.3.4参数绑定 bind
    10.3lambda表达式笔记
    第10章 10.1-10.3笔记
    关于按下ctrl+z后,之后的cin失效的问题
    构造和改变一个string的其他方法
    BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解
  • 原文地址:https://www.cnblogs.com/china-mjr/p/11291053.html
Copyright © 2020-2023  润新知