LeetCode 130 Surrounded regions

题目的描述在这里插入图片描述

大致意思就是把被x包围的0全都变成x,难点是在于,怎么判断这个点被x所包围呢
太机智了,这个up给了一个思路:从四条边上开始判断,找到0的位置,然后把这个位置的0开始遍历,并做标记,然后遍历全部的图,把没有被标记的,并且值为0 的数变成1。

要主要这个是伪代码。。。只是给 了全部的思路,还没有完善

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<queue>
using namespace std;
//从四条边上开始判断,找到0的位置,然后把这个位置的0开始遍历,并做标记,然后遍历全部的图,把没有被标记的,并且值为0 的数变成1。
int A[4]={0,0,1,-1};
int B[4]={1,-1,0,0};
//对于dfs方法很简单,就是判断这个位置是不是0,如果是的话,就把这个位置标记设置一下。然后遍历他的周围
//这个判断函数可写可不写
bool juege(int x,int y){
    if(x<0||x>=m||y<0||y>=m)
        return false;//越界
    if(map[x][y]='0'&&!visted[x][y])
        return true;
    else
        return false;
}
void DFS(int x,int y){
    if(map[x][y]=='0'){
        flag=true;//这个是用来判断它是不是被0出去,并且被标记的
        visted[x][y]=true;//这个是用来判断有没有被访问过
        for(int i=0;i<4;i++){
            int w=x+A[i];
            int z=y+B[i];
            if(juege(w,z))//如果他可以访问的话
            DFS(w,z);
                
        }
            
            
}
}
void vis(){
//这个方法就是用来把从四个边界出去的,全部都遍历过
    int i,j;
    for(i=0,j=0;i<n,j<m;i++,j++){
        DFS(i,0);
        DFS(i,m);//分别是第一列和最后一列
        DFS(0,j);
        DFS(n,j);
    }
}
int main(){
    //在主函数处进行判断
    for(int i=0;i<n;i++)
    for(int j=0;j<m;j++){
        if(flag[i][j])
            map[i][j]='x';//所有标记过的,全都换成x
    }
   

}

发布了88 篇原创文章 · 获赞 5 · 访问量 3543

猜你喜欢

转载自blog.csdn.net/qq_41115379/article/details/105100330