码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-03-12 18:20:20      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:std   删除   ble   下一步   链接   false   ring   标记   cin   

题目链接: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;
} 

求大佬找错~~~~~

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

标签:std   删除   ble   下一步   链接   false   ring   标记   cin   

原文地址:http://www.cnblogs.com/KyleDeng/p/6538494.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!