BFS

今天详细看了一下BFS
算法和之前学习的……emmmmmm可能开始不够吧
先看一下蓝桥杯一道全球变暖的题……恨不得练10000道让我信手捏来一个dfs
第一遍一直提醒自己递归,然而……
思路就是最开始统计一下多少个岛屿
然后淹没之后统计岛屿相减
然而第一遍每次都是从头到尾遍历,相当于树的层序遍历吧,复杂度极高,运行时间也很长

#include 
#include 
#include 
#include 
#include 
using namespace std;
int n;
char MAP[1005][1005];

struct plain{
    bool tag;
    bool drown;
    int k;
};
plain MAP2[1005][1005];

int dir[4][2]={-1,0,1,0,0,-1,0,1};
int K=1;
void visit(char MAP[1005][1005],int x,int y){

    bool flag=false;
    if(MAP[x][y]=='#'){ 
    for(int i=0;i<4;i++){
            int X=x+dir[i][0];
            int Y=y+dir[i][1];//重新定义避免影响其他方向 
            
            if(MAP[X][Y]=='.') 
            {
            MAP2[x][y].drown=true;  
            }
            if(MAP[X][Y]=='#')
            {
                if(MAP2[X][Y].tag==false)flag=true;
                MAP2[X][Y].k=K;
            }
            MAP2[x][y].tag=true;
        }
        if(flag==false)K++;
        cout<

第二遍倒是用了递归dfs……然鹅,按照我之前的思路统计岛屿个数,就是如果一片土地周围除了海被访问过的岛,他就是这片岛的最后一个……就是这个zz算法完全会把一个岛切成2个啊
受不了自己的智商……就这样吧 打印准考证去了……

#include 
#include 
#include 
#include 
#include 
using namespace std;
int n;
char MAP[1005][1005];
char MAP2[1005][1005];
int dir[4][2]={-1,0,1,0,0,-1,0,1};
int K=1;

void drown(int x,int y){
    for(int i=0;i<4;i++){
            cout<<"###"<

你可能感兴趣的:(BFS)