标签: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