1 3 3 Y*C 1 3 2 Y#C 1 5 2 YP#PC
3 Damn teoy! 0
#include<cstring>
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<vector>
#include<queue>
#include<cmath>
#define N 5010
#define ll long long
using namespace std;
struct node {
int num;
int x,y;
};
queue<node>p;
node a;
int n,m,k;
struct edge {
int x,y;
} b[350];
int l;
bool vis[N][N];
char s[N][N];
int ans;
int Yi,Yj,Ci,Cj;
int xx[4]= {0,0,1,-1};
int yy[4]= {1,-1,0,0};
void bfs() {
memset(vis,0,sizeof vis);
while(p.size()) {
p.pop();
}
a.num=0;
a.x=Yi,a.y=Yj;
p.push(a);
vis[Yi][Yj]=1;
while(!p.empty()) {
node t=p.front();
if(t.x==Ci&&t.y==Cj) {
ans=t.num;
break;
}
p.pop();
for(int i=0; i<4; i++) {
int nx=xx[i]+t.x;
int ny=yy[i]+t.y;
a.x=nx;
a.y=ny;
a.num=t.num;
if(nx>=0&&nx<n&&ny>=0&&ny<m&&s[nx][ny]!='#'&&!vis[nx][ny]) {
if(s[nx][ny]=='P') {
for(int j=0; j<l; j++) {
a.x=b[j].x;
a.y=b[j].y;
p.push(a);
vis[a.x][a.y]=1;
}
} else if(s[nx][ny]=='*') {
a.num+=1;
p.push(a);
} else {
p.push(a);
}
vis[nx][ny]=1;
}
}
}
}
int main() {
// freopen("test.in","r",stdin);
while(~scanf("%d%d%d",&n,&m,&k)) {
l=0;
for(int i=0; i<n; i++) {
scanf("%s",s[i]);
for(int j=0; j<m; j++) {
if(s[i][j]=='Y') {
Yi=i;
Yj=j;
} else if(s[i][j]=='C') {
Ci=i;
Cj=j;
} else if(s[i][j]=='P') {
b[l].x=i;
b[l++].y=j;
}
}
}
ans=-1;
bfs();
if(ans==-1) {
printf("Damn teoy!\n");
continue;
}
ans*=k;
printf("%d\n",ans);
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
hdu 4308 Saving Princess claire(BFS)
原文地址:http://blog.csdn.net/acm_baihuzi/article/details/46919427