喵哈哈村的代码传说 第三章 宽度优先搜索

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了喵哈哈村的代码传说 第三章 宽度优先搜索相关的知识,希望对你有一定的参考价值。

题目链接:http://qscoj.cn/problem/37/

要写作业了……

先上代码

#include<bits/stdc++.h>
#define MAXN 10086
using namespace std;
int dx[5]={0,-1,0,0,1};
int dy[5]={0,1,0,-1,0};
int mp[MAXN][MAXN];//标记数组
string s[MAXN];//s是一排,MAXN是列数 
int n,m;//地图大小 
int xx0,yy0,xx1,yy1;//起点和终点 
int check(int x,int y)
{
    if(x<0||x>=n)return false;
    if(y<0||y>=m)return false;//判断越界 
    if(mp[x][y]!=-1)return false;// 看一下标记来看是否走过 
    if(s[x][y]==0)return false;//地图上是否为零 
    return true;
}//判断这个点可不可以走 
void solve()
{
    xx0--,yy0--,xx1--,yy1--;
    for(int i=0;i<n;i++) cin>>s[i];//读入地图 
    memset(mp,-1,sizeof(mp));//全部标为 -1表示没有走过 
    queue<int> QX,QY;//队列交叉跑 
    QX.push(xx0);
    QY.push(yy1);
    mp[xx0][yy1]=0;//对起点的距离为零 
    while(!QX.empty())
    {
        int nowx=QX.front();
        int nowy=QY.front();
        QX.pop(),QY.pop();//取出并删除坐标的过程 
        for(int i=1;i<=4;i++)
        {
            int nex=nowx+dx[i];
            int ney=nowy+dy[i];//“下一步”要走的坐标 
            if(check(nex,ney))//判断这样走是否合法 
            {
                mp[nex][ney]=mp[nowx][nowy]+1;//递推 
                QX.push(nex);
                QY.push(ney);
            }
        }//枚举每一个可以走的方向
    }//只要队列不为空就一直刷(直到标记数组填满) 
}
int main()
{
    while(cin>>n>>m>>xx0>>yy0>>xx1>>yy1)
        solve();
    return 0;
} 

求大佬找错~~~~~

以上是关于喵哈哈村的代码传说 第三章 宽度优先搜索的主要内容,如果未能解决你的问题,请参考以下文章

喵哈哈村的代码传说 第一章 冒泡排序

喵哈哈村的代码传说 第四章 并查集

喵哈哈村的代码传说 第四章 并查集

喵哈哈村的代码传说 第四章 并查集

喵哈哈村的木星传说

10喵哈哈村的魔法石