(基础)--- 走迷宫(bfs)

最短路模型

#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;

typedef pair<int,int> PII;

const int N = 110;
int n,m;
int g[N][N];
int d[N][N];
PII q[N*N];//手写队列

int dfs() {
	int hh=0,tt=0;
	q[0]= {0,0};
	memset(d,-1,sizeof(d));//初始化-1为标记,没搜寻过
	d[0][0]=0;
	int dx[4]= {-1,0,1,0},dy[4]= {0,1,0,-1};//左右上下
	while(hh<=tt) {
		auto t=q[hh++];//t表示当前位置
		for(int i=0; i<4; i++) {
			int x=t.first+dx[i],y=t.second+dy[i];//(x、y)移动后的位置
			if(x>=0&&x<n&&y>=0&&y<m&&g[x][y]==0&&d[x][y]==-1) {
				d[x][y]=d[t.first][t.second]+1;//当前位置+1
				q[++tt]= {x,y};//进入队列用于下次查询
			}
		}
	}
	return d[n-1][m-1];
}
int main() {
	cin>>n>>m;
	for(int i=0; i<n; i++)
		for(int j=0; j<m; j++)
			cin>>g[i][j];

	cout<<dfs()<<endl;

	return 0;
}
posted @ 2020-07-09 10:29  chstor  阅读(156)  评论(0编辑  收藏  举报