记录编号 |
553840 |
评测结果 |
WWWWWWWWWWWWWW |
题目名称 |
[USACO Feb07] 银色莲花池 |
最终得分 |
0 |
用户昵称 |
城南花已开 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.000 s |
提交时间 |
2020-08-27 23:46:47 |
内存使用 |
0.00 MiB |
显示代码纯文本
# include <iostream>
# include <cstdio>
using namespace std;
int m,n,pool1[31][31],qx[902],qy[902],sum2=0,startx,starty,lh[1500]={0};
int min2=2333333,before1[902],total1=0,sum1[902],a,b,min1=2333333,head=0,tail=1,i,j;
int heng[9]={0,1,2,2,1,-1,-2,-2,-1},shu[9]={0,2,1,-1,-2,-2,-1,1,2},step1[1500];
bool pool2[31][31];
void bfs(){
qx[1]=startx;
qy[1]=starty;
sum1[1]=0;
do{
head++;
pool2[qx[head]][qy[head]]=false;
if(pool1[qx[head]][qy[head]]==4){
total1++;
pool2[qx[head]][qy[head]]=true;
step1[total1]=sum1[head];
a=head;
while(pool1[qx[before1[a]]][qy[before1[a]]]!=3){
if(pool1[qx[before1[a]]][qy[before1[a]]]==0){
lh[total1]++;
}
b=before1[a];
a=b;
}
}
else{
for(i=1;i<=8;i++){
if(qx[head]+heng[i]>=1&&qx[head]+heng[i]<=m&&qy[head]+shu[i]>=1&&qy[head]+shu[i]<=n){
if(pool2[qx[head]+heng[i]][qy[head]+shu[i]]==true){
tail++;
qx[tail]=qx[head]+heng[i];
qy[tail]=qy[head]+shu[i];
before1[tail]=head;
sum1[tail]=sum1[head]+1;
}
}
}
}
}while(head<tail);
}
int main(){
freopen("silvlily.in","r",stdin);
freopen("silvlily.out","w",stdout);
scanf("%d%d",&m,&n);
for(i=1;i<31;i++){
for(int j=1;j<31;j++){
pool2[i][j]=true;
}
}
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
scanf("%d",&pool1[i][j]);
if(pool1[i][j]==2){
pool2[i][j]=false;
}
if(pool1[i][j]==3){
startx=i;
starty=j;
}
}
}
bfs();
if(total1==0){
printf("%d",-1);
return 0;
}
for(i=1;i<=total1;i++){
if(lh[i]<min1){
min1=lh[i];
}
}
for(i=1;i<=total1;i++){
if(lh[i]==min1){
if(step1[i]<min2)
min2=step1[i];
}
}
for(i=1;i<=total1;i++){
if(lh[i]==min1&&step1[i]==min2){
sum2++;
}
}
printf("%d\n%d\n%d",min1,min2,sum2);
fclose(stdin);
fclose(stdout);
return 0;
}