• 图2(矩环问题)


    问题描述

    小鑫的女朋友被魔王抢走了!魔王留给小鑫一张n*m大的表,上面有各种各样的颜色,用A-Z这26个字母来表示。魔王留给他一个任务,如果小鑫可以在这张表中找出任意一个长度大于1的环,并且这个环的颜色是相同的,魔王就把小鑫的女朋友还给他。为了从魔王手中夺回他的女朋友,小鑫请你帮忙,你能帮帮他吗?

    输入

    多组输入。每组的第一行有两个整数n,m。代表表的大小。接下来是由A-Z的一些字母所构成的n行m列的表。1<=n,m<=200

    输出

    如果可以救回他的女朋友,输出Yes,否则输出No

    样例输入

    4 7

    ABCBBAA

    BCBCBCB

    AABBCCA

    ACCCBBB

    10 3

    AAC

    ABB

    BBA

    AAC

    CBC

    CCA

    CBB

    CCA

    CCB

    BAA

    样例输出

    No

    Yes

    #include"iostream"
    using namespace std;
    char map[201][201];        //
    bool v[201][201];        //记录是否遍历过
    int w,h;                //图的宽高
    int pos[4][2] = {{1,0},{-1,0},{0,-1},{0,1}};        //四个方向
    int dir1[4] = {1,0,3,2};        //相反方向
    bool flag;                //标记
    
    void create(){
        for(int i = 0;i < h;i++){
            for(int j = 0;j < w;j++){
                cin>>map[i][j];
            }
        }
    }
    void dfs(int y,int x,char c,int dir){        //上下左右:0,1,2,3
        if(v[y][x]){
            flag = true;
        }
        if(map[y][x] == c){
                map[y][x] = '0';
                v[y][x] = 1;
            for(int i = 0;i < 4;i++){
                if(pos[i][0] + y >= 0 && pos[i][0] + y < h && pos[i][1] + x >= 0 && pos[i][1] + x < w && dir1[i] != dir)    //没越界且没反向
                    dfs(pos[i][0] + y,pos[i][1] + x,c,i);
            }
        }
        v[y][x] = false;
    }
    int main(){
        memset(v,0,sizeof(v));
        while(cin>>h>>w && h && w){
            flag = false;
            create();
            for(int i = 0;i < h;i++){
                for(int j = 0;j < w;j++){
                    if(map[i][j] != '0'){
                        dfs(i,j,map[i][j],3);
                    }
                    if(flag)
                        break;
                }
                if(flag)
                    break;
            }
            if(flag)
                cout<<"YES"<<endl;
            else
                cout<<"NO"<<endl;
        }
        return 0;
    }
  • 相关阅读:
    QTableWidget清空
    SQLite查询表是否存在
    QSplitter测试
    Qto_CoveringBaseQuantities
    osg旋转
    Qto_CurtainWallQuantities
    没有理清的一段代码
    方块
    Qto_DoorBaseQuantities
    全微分在近似计算中的应用
  • 原文地址:https://www.cnblogs.com/oleolema/p/9032807.html
Copyright © 2020-2023  润新知