#include<bits/stdc++.h>
using namespace std;
int n,m;
int x1,y3,x2,y2,x,y;
char aaa;
int a[200][200];
int minn1=1e10,minn2=1e10;
int dis[200][200];
int xy[20][20]=
{
{0,0,1,-1,1,1,-1,-1},
{1,-1,0,0,1,-1,-1,1}
};
queue <pair<int,int> > q;
void bfs(int x,int y){
q.push({x,y});
while(!q.empty()){
int xx=q.front().first;
int yy=q.front().second;
q.pop();
for(int i=0;i<8;i++){
int xxx=xx+xy[0][i];
int yyy=yy+xy[1][i];
if(!a[xxx][yyy]||dis[xxx][yyy]||xxx>n||yyy>m||xxx<1||yyy<1) continue;
dis[xxx][yyy]=dis[xx][yy]+1;
q.push({xxx,yyy});
}
}
}
int main(){
scanf("%d %d", &n, &m);
bool f=1;
int i,j;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cin>>aaa;
if(aaa=='X'){
a[i][j]=0;
if(f) x1=i-1,y3=j,f=0;
x2=i+1,y2=j;
}
else{
a[i][j]=1;
if(aaa=='*') x=i,y=j;
}
}
}
//cout<<x<<" "<<y<<endl<<x1<<" "<<y3<<endl<<x2<<" "<<y2;
if(x<=x1&&y==y2){
x1=x2,y3=y2;
for(i=x1;i<=n;i++) a[i][y3]=0;
}
else{
for(i=1;i<=x1;i++) a[i][y3]=0;
}
bfs(x,y);
/*
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) cout<<dis[i][j];
cout<<endl;
}
*/
for(i=x1-1;i<=x1+1;i++){
if(a[i][y3-1])
minn1=min(minn1,dis[i][y3-1]);
if(a[i][y3+1])
minn2=min(minn2,dis[i][y3+1]);
}
cout<<minn1+minn2+2;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n,m;
int x1,y3,x2,y2,x,y;
char aaa;
int a[200][200];
int minn1=1e10,minn2=1e10;
int dis[200][200];
int xy[20][20]=
{
{0,0,1,-1,1,1,-1,-1},
{1,-1,0,0,1,-1,-1,1}
};
queue <pair<int,int> > q;
void bfs(int x,int y){
q.push({x,y});
while(!q.empty()){
int xx=q.front().first;
int yy=q.front().second;
q.pop();
for(int i=0;i<8;i++){
int xxx=xx+xy[0][i];
int yyy=yy+xy[1][i];
if(!a[xxx][yyy]||dis[xxx][yyy]||xxx>n||yyy>m||xxx<1||yyy<1) continue;
dis[xxx][yyy]=dis[xx][yy]+1;
q.push({xxx,yyy});
}
}
}
int main(){
scanf("%d %d", &n, &m);
getchar();
bool f=1;
int i,j;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
aaa=getchar();
if(aaa=='X'){
a[i][j]=0;
if(f) x1=i-1,y3=j,f=0;
x2=i+1,y2=j;
}
else{
a[i][j]=1;
if(aaa=='*') x=i,y=j;
}
}
getchar();
}
//cout<<x<<" "<<y<<endl<<x1<<" "<<y3<<endl<<x2<<" "<<y2;
if(x<=x1&&y==y2){
x1=x2,y3=y2;
for(i=x1;i<=n;i++) a[i][y3]=0;
}
else{
for(i=1;i<=x1;i++) a[i][y3]=0;
}
bfs(x,y);
/*
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) cout<<dis[i][j];
cout<<endl;
}
*/
for(i=x1-1;i<=x1+1;i++){
if(a[i][y3-1])
minn1=min(minn1,dis[i][y3-1]);
if(a[i][y3+1])
minn2=min(minn2,dis[i][y3+1]);
}
cout<<minn1+minn2+2;
return 0;
}
第二份代码(10pts)只是将第一份代码(AC)的cin改为getchar为什么不对