码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2020-07-09 10:36:09      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:队列   手写   上下   初始化   using   def   turn   i++   pre   

最短路模型

技术图片

#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;
}

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

标签:队列   手写   上下   初始化   using   def   turn   i++   pre   

原文地址:https://www.cnblogs.com/bingers/p/13272111.html

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