【挑战程序设计竞赛】之 迷宫的最短路径

来源:互联网 发布:brpc java 编辑:程序博客网 时间:2024/05/17 12:48

挑战程序设计竞赛之 迷宫的最短路径
考察BFS。
因为要向4个不同的方向移动,用dx[4]和dy[4]两个数组来表示四个方向向量,然后通过一个循环可以实现四个方向的移动。
完整代码如下:

#include<iostream>#include<queue>#define MAX_N 100#define MAX_M 100using namespace std;const int INF=100000000;typedef pair<int,int>P;char maze[MAX_N][MAX_M+1];int N,M;int sx,sy;int gx,gy;int d[MAX_N][MAX_M];int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};int bfs(){ queue<P> que; for(int i=0;i<N;++i)  for(int j=0;j<M;++j)     d[i][j]=INF; que.push(P(sx,sy) ); d[sx][sy]=0; while(que.size()) {  P p=que.front();  que.pop();  if(p.first==gx&&p.second==gy)       break;  for(int i=0;i<4;++i)  {   int nx=p.first+dx[i];   int ny=p.second+dy[i];   if(nx>=0&&nx<N&&ny>=0&&ny<M&&maze[nx][ny]!='#'&&d[nx][ny]==INF)   {    que.push(P(nx,ny));    d[nx][ny]=d[p.first][p.second]+1;   }  } } return d[gx][gy];}void solve(){ int res=bfs(); cout<<res<<endl;}int main(){ cin>>N>>M; cin>>sx>>sy>>gx>>gy; for(int i=0;i<N;++i)   for(int j=0;j<M;++j)     cin>>maze[i][j];    solve();   return 0;}

参考书籍:《挑战程序设计竞赛》

0 0
原创粉丝点击