广度优先搜索

广度优先搜索

属于一种盲目的搜索法,系统展开并检查图中的所有节点,以寻求结果,并不考虑结果的可能位置,得彻底搜索整张图,直到找到结果,牺牲空间换时间。广度优先搜索时间更快,但是相对内存更大;
广度优先搜索借助了队列,把所有展开的节点放入一个队列中,每次从队首取出节点,再将该节点的展开节点放入队尾,直到达到终点或者队列为空;
在这里插入图片描述

算法:
(1)将起点入队;
(2)队首结点可拓展的点入队;如果没有课拓展的点,则将队首元素出队,重复该步骤,直到队列为空或满足条件;

#include<iostream>  
#include<queue>  
#include<bits/stdc++.h>  
using namespace std;  
int a[100][100],book[100][100];  
struct point{  
    int x;  
    int y;  
    int step;  
};  
queue<point> r;  
int dx[4]={0,1,0,-1};  
int dy[4]={1,0,-1,0}; 

int main(){  
    int n,m,startx,starty,p,q;  
    cin >> n >>m;  
    for(int i = 1; i <= n; i++){  
        for(int j = 1; j <= m; j ++){  
            cin >>a[i][j];  
        }  
    }  
    cin >>startx >> starty >> p >> q;  
    //BFS  
    point start;  
    start.x = startx;  
    start.y = starty;  
    start.step = 0;  
    r.push(start);  
    book[startx][starty] = 1;  
    int flag = 0;  
    while(!r.empty()){  
       int x = r.front().x;  
       int y = r.front().y;  
       if(x == p && y == q){  
           flag = 1;  
           cout <<r.front().step;  
           break;  
       }  
    for(int k = 0; k <= 3 ; k++){  
        int tx,ty ;  
        tx = x + dx[k];  
        ty = y + dy[k];  
        if(a[tx][ty]==1&&book[tx][ty]==0){  
            //入队  
            point temp;  
            temp.x = tx;  
            temp.y = ty;  
            temp.step = r.front().step +1;  
            r.push(temp);  
            book[tx][ty]=1;  
        }  
    }  
    r.pop();  
    }  
    if(flag == 0)  
    cout<<"no";  
    return 0;  
}  
/* 
5 4  
1 1 2 1  
1 1 1 1  
1 1 2 1 
1 2 1 1 
1 1 1 2 
1 1 4 3 
*/  

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

释怀°Believe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值