代码随想录算法训练营 | 图论 | 孤岛总面积、沉没孤岛

101. 孤岛的总面积//思路大概是先计算面积,然后如果有接触路面就返回false。可能稍微多余算了太多无用面积。

#include
using namespace std;
void sum(vector>& finded,const vector>& graph,int a,int b,int& result,bool& Ifisland){
    if(a<0||b<0||a>graph.size()-1||b>graph[0].size()-1) return;
    else if(finded[a][b]==true) return;
    else if(graph[a][b]==0){
        finded[a][b]=true;
        return;
    }
    else {
        finded[a][b]=true;
        result++;
        if(a==0||b==0||a==graph.size()-1||b==graph[0].size()-1) Ifisland=false;
        sum(finded,graph,a+1,b,result,Ifisland);
        sum(finded,graph,a,b+1,result,Ifisland);
        sum(finded,graph,a-1,b,result,Ifisland);
        sum(finded,graph,a,b-1,result,Ifisland);
    }
    return;
}
int main(){
    int n,m;
    cin>>n>>m;
    vector> graph(n,vector (m));
    for(int i=0;i>graph[i][j];
        }
    }
    int sumcount=0;
    vector> finded(n,vector (m));
    for(int i=0;i

102. 沉没孤岛//思路大致是,先遍历边框的,然后递归把连着的陆地都扫过,最后把没扫过的且为陆地的改为0。最后按题目的要求输出。

#include
using namespace std;

void DFS(vector>& finded,const vector>& graph,int i,int j){
    if(i<0||j<0||i>graph.size()-1||j>graph[0].size()-1) return;
    else if(finded[i][j]) return;
    else if(graph[i][j]==0) {
        finded[i][j]=true;
        return;
    }
    else{
        finded[i][j]=true;
        DFS(finded,graph,i+1,j);
        DFS(finded,graph,i,j+1);
        DFS(finded,graph,i-1,j);
        DFS(finded,graph,i,j-1);
    }
}

int main(){
    int n,m;
    cin>>n>>m;
    vector> graph(n,vector (m));
    for(int i=0;i>graph[i][j];
        }
    }
    vector> finded(n,vector (m,false));    
    for(int i=0;i

你可能感兴趣的:(代码随想录学习记录,算法,图论)