【p1746】【练习模板】离开中山路

题目:转移门

为了复习BFS做几道题吧,很基础的BFS和棋盘类的差不多,注意打标记即可,废话不多说直接上代码

代码:

#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int n;
int sx,sy;
int zx,zy;
struct ch{
int x;
int y;
int step;
}f[100005];
char aa[1005][1005];
int a[1005][1005];
int ok[1005][1005];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int sum=100000005;
void bfs(int p,int q){
int head;
int tail;
head=tail=1;
f[tail].x=sx;
f[tail].y=sy;
f[tail].step=0;
ok[sx][sy]=1;
int xx;
int yy;
while(head<=tail){
for(int i=0;i<=3;i++){
xx=f[head].x+dx[i];
yy=f[head].y+dy[i];
if(xx<=n&&yy<=n&&xx>=1&&yy>=1){
if(ok[xx][yy]==0){
	tail++;
f[tail].x=xx;
f[tail].y=yy;
f[tail].step=f[head].step+1;
ok[xx][yy]=1;
if(xx==zx&&yy==zy)
sum=min(sum,f[tail].step);
}
}
}
head++;
}
return;
}
int main() {
scanf("%d\n",&n);
for (int i=1;i<=n;i++)
		scanf ("%s\n",aa[i]+1);
	for(int i=1; i<=n; i++)
		for(int j=1; j<=n; j++)
			a[i][j]=aa[i][j]-'0';
cin>>sx>>sy;
cin>>zx>>zy;
bfs(sx,sy);
cout<<sum;
return 0;
}
啦啦啦啦熬夜爆肝啊

猜你喜欢

转载自blog.csdn.net/sericon/article/details/94592957