广搜题解8.17

该博客介绍了如何利用BFS(广度优先搜索)策略解决HDU1312问题,通过队列数据结构遍历二维数组。代码中定义了节点结构,并给出了搜索方向数组。在主函数中,读取输入并初始化矩阵,然后调用BFS函数进行搜索,更新矩阵并将搜索到的节点数量输出。博客突出了BFS在图遍历中的应用和C++实现细节。
摘要由CSDN通过智能技术生成

BFS

一般用队列这种数据结构来具体实现BFS;
对于DFS,运用递归实现最普遍,也可以用“栈”,两种在算法思想上一致。

BFS

例题 hdu1312(队列,bfs模板)

#include <iostream>
#include <queue>
#define check(x,y)(x<n&&y<m&&x>=0&&y>=0)
//深搜现学现卖
//出队,周围点进队
//练习搜索
using namespace std;
char c[25][25];
int n,m,num;
//方向
int d[4][2]=
{
    {-1,0},{0,-1},{1,0},{0,1}//左上右下
};
struct node
{
    int x;
    int y;
};
void BFS(int dx,int dy)
{
    num=1;
    queue<node>q;
    node st,nt;
    st.x=dx;
    st.y=dy;
    q.push(st);
    while(!q.empty())
    {
        st=q.front();
        q.pop();
        for(int i=0; i<4; i++) //按四个方向搜索
        {
            nt.x=st.x+d[i][0];
            nt.y=st.y+d[i][1];
            if(check(nt.x,nt.y)&&c[nt.x][nt.y]=='.')
            {
                c[nt.x][nt.y]='#';
                num++;
                q.push(nt);
            }
        }
    }
}
int main()
{
    int i,j;
    int dx,dy;
    while(cin>>n>>m)
    {
        if(n==0&&m==0)
            break;
        for(j=0; j<m; j++)
        {
            for(i=0; i<n; i++)
            {
                cin>>c[i][j];
                if(c[i][j]=='@')
                {
                    dx=i;
                    dy=j;
                }
            }
        }
       // num=0;
        BFS(dx,dy);
        cout<<num<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值