//
// main.cpp
// HDU 2822 BFS+优先队列
//
// Created by 郑喆君 on 8/13/14.
// Copyright (c) 2014 itcast. All rights reserved.
//
#include<cstdio>
#include<cstring>
#include<iostream>
#include<iomanip>
#include<queue>
#include<cmath>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
typedef long long LL;
const int int_max = 0x07777777;
const int int_min = 0x80000000;
struct Node{
int x,y,cnt;
Node(int _x, int _y, int _cnt):x(_x),y(_y),cnt(_cnt){}
};
struct cmp{
bool operator()(Node a, Node b){
return a.cnt > b.cnt;
}
};
int n,m;
int si,sj,ei,ej;
char mymap[1005][1005];
int vis[1005][1005];
int result;
void bfs(){
int dir[4][2] = {-1,0,0,1,1,0,0,-1};
priority_queue<Node,vector<Node>, cmp> q;
memset(vis, 0, sizeof(vis));
vis[si][sj] = 1;
q.push(Node(si,sj,0));
while (!q.empty()) {
Node u = q.top();
q.pop();
for(int i = 0; i < 4; i++){
int xx = u.x+dir[i][0];
int yy = u.y+dir[i][1];
if(xx>=1 && xx <=n && yy>=1 && yy<=m &&vis[xx][yy]==0){
int cnt = u.cnt;
if(mymap[xx][yy]=='.') cnt++;
vis[xx][yy] = 1;
if(xx==ei&&yy==ej){
result = cnt;
return;
}
q.push(Node(xx,yy,cnt));
}
}
}
}
int main(int argc, const char * argv[])
{
while (scanf("%d %d", &n, &m)!=EOF) {
if(n==0 && m==0) break;
for(int i = 0; i < n; i++){
scanf("%s", mymap[i+1]+1);
}
scanf("%d %d %d %d", &si, &sj, &ei, &ej);
bfs();
printf("%d\n", result);
}
}
HDU 2822 BFS+优先队列
最新推荐文章于 2021-08-20 20:01:20 发布