首页 > 代码库 > 喵哈哈村的代码传说 第三章 宽度优先搜索
喵哈哈村的代码传说 第三章 宽度优先搜索
题目链接: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; }
求大佬找错~~~~~
喵哈哈村的代码传说 第三章 宽度优先搜索
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。