[这是算法]廣度搜索的一些總結

今天寫點有用的吧,畢竟這是個主推程序設計的博客
So
廣度搜索

  • 定義:廣度優先算法(BFS),這是個好東西,有多好,能上天 能快速幫我們找出目標節點,適用於找最短路徑,最小生成樹等,過程差不多就是:
    1-從根結點開始,訪問根節點
    2-訪問所有與根結點相接的結點
    3-以此訪問2-找到的節點,注意要是未訪問的
    4-重複2-3-,直到所有結點都被訪問過爲止
    比較體現縱向層次對吧;

  • 算法例題:
    Knight Moves轉自與c++ 广度优先搜索(宽搜) - 牛大了的牛大
    在这里插入图片描述
    贝茜和表妹各有一颗棋子。棋子每次移一步,且棋子只能往如图所示的八个方向移动。比赛的规则很简单,两个人需要从起点将棋子移到终点,谁能花最少的步数从起点走到终点,就是赢家。
    为了确保能赢表妹,贝茜希望每次都能算出最少的步数,你能帮助她么?

    输入:起点和终点,用一个空格隔开。(确保起点一定能走到终点)
    输出:最少的步数。
    #################分割綫################################
    代碼如下:

#include <bits/stdc++.h>
using namespace std;
struct Point
{
    int x,y,step;
};
Point q[1000000],s,t;//t是终点,s是起点 
int dx[8]={1,-1,1,-1,2,2,-2,-2};//dx[] + dy[] 代表Knight走的8个方向可达的点 
int dy[8]={2,2,-2,-2,1,-1,1,-1};
int f=1,e=0;
int main()
{
    char ca,cb,cc,cd;
    scanf("%c%c %c%c",&ca,&cb,&cc,&cd);//输入 
    s.x=ca-'a'+1,s.y=cb-'1'+1;s.step=0;//把a转换成数字1 把字符1转换成数字1 
    t.x=cc-'a'+1,t.y=cd-'1'+1;t.step = 0;//把b转换成数字2 把字符2转换成数字2 
    if(s.x==t.x&&s.y==t.y)//如果起点等于终点,就直接退出 
    {
        printf("0\n");
        return 0;
    }
    e++;//队列入队时候的下标
     
    q[e]=s;//q就是队列 把所有待查找的元素放在q队列里面 首先把第一个骑士s放在q队列里的第一个位置
开始宽搜
    while(f<=e)//出队的下标不能大于入队时候的下标 
    {
        Point u=q[f];//f是队列出队时候的下标      //* u是在队列中选定的骑士 *//注意!!!!!!!此处下标为f!!!!!!!!!///
        for(int i=0;i<8;i++)//for循环为了能 加上dx[] 和dy[] 
        {
            Point v;//v是有效的骑士 
            v.x = u.x + dx[i],v.y = u.y + dy[i],v.step=u.step + 1;//把选定的位置向8个方向扩展(一次) 
            if(v.x<1||v.x>8||v.y<1||v.y>8)continue;//如果这个骑士的位置不在棋盘上,则丢弃 
            if(t.x==v.x&&t.y==v.y)//找到了终点 
            {
                printf("%d\n",v.step);//输出步数 
                return 0;
            }
            e++;// 把入队下标 + 1 
            q[e]=v;//  入队 
        }
        f++;//出队下标 + 1 
    }
    return 0;
}

其實我也說不明白,但是這位po主的過程給的很詳細,我覺得聰明的你們一點能看懂
明天補充注意事項

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值