1. 程式人生 > 其它 >YbtOJ 廣度搜索課堂過關 例1 走迷宮【bfs】

YbtOJ 廣度搜索課堂過關 例1 走迷宮【bfs】

技術標籤:YbtOJ專項練習題題解bfsbfsYbtoj題解

在這裡插入圖片描述


思路

這道題是一道廣搜模板題。
廣搜都快忘了怎麼打了,打完這道題之後重拾一些了。

C o d e Code Code

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int dx[5]={0,1,0,0,-1};
int dy[5]={0,0,1,-1,0};
int f[1010000][5],v[1010][1010];
int n,a[1010][1010];
int sx,sy,tx,ty;
int q[1000010];
int
bfs() { int hd=0,tl=1; f[1][0]=0; f[1][1]=sx; f[1][2]=sy; v[sx][sy]=1; while(hd<tl) { hd++; for(int i=1; i<=4; i++) { int xx=f[hd][1]+dx[i]; int yy=f[hd][2]+dy[i]; if(a[xx][yy]==0&&xx>=1&&xx<=n&&yy>=1&&yy<=n&&v[xx]
[yy]==0) { tl++; v[xx][yy]=1; f[tl][0]=f[hd][0]+1; f[tl][1]=xx; f[tl][2]=yy; if(xx==tx&&yy==ty) { cout<<f[tl][0]; return 0; } } } } } int main() { cin>>n; for(int i=1; i<=n; i++) for(int j=1
; j<=n; j++) scanf("%1d",&a[i][j]); scanf("%d%d%d%d",&sx,&sy,&tx,&ty); bfs(); return 0; }