算法学习-广搜和深搜1-填色问题

广搜和深搜


由于每次学一点东西总结一下过于费时间,于是改为周末阶段总结,而且写得长篇大论同样浪费时间,我就按着自己可以理解的方式直接写好了,同时进行复习.


<广度优先搜索>

1.前言

  • 广度优先搜索算法(Breadth-First Search,BFS是一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。BFS并不使用经验法则算法。
  • 实现思想:看这个
    总之广搜用队列,深搜用递归

2.代码实现

题目:洛谷P1162

解答:先用广搜从左上方开始找0:

......
int xx[4]={-1,1,0,0},yy[4]={0,0,-1,1};

int main()
{
    ......
    queue<int> x,y;
    x.push(0);//最初从(0,0)开始读入整组数据到二维数组arr中
    y.push(0);
    vis[0][0]=1;//表示0,0已经经过,防止重复计算(0,0)
    if(!x.push())//队列x不为空,也就是队列x,y都不为空,因为都是添加(押入)和删除(弹出)。
    {
        for(int i=0;i<=3;++i)//通过之前定义的数组实现移动位置
        {
            int dx=x.front()+xx[i];
            int dy=y.front()+yy[i];
            if(arr[dx][dy]=='0'&&dx>=0&&dx<=n-1&&dy>='0'&&dy<=n-1&&vis[dx][dy]==0;)
            {
                x.push(dx);
                y.push(dy);
                vis[dx][dy]=1;
            } 
        }
        x.pop();
        y.pop();
    }
}

这样看样子就可以吧1外面所有的0都遍历了,不过万一1组成的包围圈把0给分割成不同部分呢?
有个办法就是把输入数据外面多加一圈零,也就是从(1,1)读入数据,接下来是完整代码。

#include<iostream>
#include<queue>
using namespace std;

int vis[35][35];
int map[35][35];
int xx[4]={0,-1,0,1};
int yy[4]={-1,0,1,0};

int main()
{
    int i=0,n=0,j=0;

    cin>>n;

    for(i=1;i<=n;++i)
        for(j=1;j<=n;++j)
        {
            cin>>map[i][j];
        }

    queue<int> x;
    queue<int> y;

    x.push(0);
    y.push(0);
    vis[0][0]=1;

    while(!x.empty())
    {
        for(i=0;i<=3;++i)
        {
            int dx=x.front()+xx[i];
            int dy=y.front()+yy[i];
            if(dx>=0&&dx<=n+1&&dy>=0&&dy<=n+1&&map[dx][dy]==0&&vis[dx][dy]==0)
            {
                x.push(dx);
                y.push(dy);
                vis[dx][dy]=1;
            }
        }
        x.pop();
        y.pop();
    }

    for(i=1;i<=n;++i)
    {
        for(j=1;j<=n;++j)
        {
            if(map[i][j]==1) cout<<1<<' ';
            else if(map[i][j]==0&&vis[i][j]==1) cout<<0<<' ';
            else cout<<2<<' ';
        }
        cout<<endl;
    }

    return 0;
}

<深搜>


八皇后就是深搜,不多赘述。

最后


不开心

posted @ 2020-11-15 21:59  七铭的魔法师  阅读(134)  评论(0)    收藏  举报