@[qym2008](/user/270120) 哦,你的马蜂和我不像,还是算了
by liqingyang @ 2020-04-19 17:05:24
@[liqingyang](/user/272088) 那我等你AC吧
by xhQYm @ 2020-04-19 17:05:47
。。。。
by Mr_Greeper @ 2020-04-19 17:09:07
救救孩子吧
by Mr_Greeper @ 2020-04-19 17:09:14
@[liqingyang](/user/272088)
@[qym2008](/user/270120)
两位大佬找出错误来@我一下,我先去肝作业了
by Mr_Greeper @ 2020-04-19 17:30:00
@[Mr_Greeper](/user/189342) 30分钟AC祭,一遍过,代码:
```cpp
#include<iostream>
#include<queue>
using namespace std;
struct point
{
int x,y,z;
};
point make(int x,int y,int z)
{
point t;
t.x=x,t.y=y,t.z=z;
return t;
}
struct word
{
int x1,y1,x2,y2;
};
word x[30];
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1},n,m,x1,y1;
char a[310][310];
bool flag[30],mark[310][310];
queue<point> q;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
if(a[i][j]=='@')
{
x1=i,y1=j;
}
if(a[i][j]>='A'&&a[i][j]<='Z')
{
if(!flag[a[i][j]-'A'])
{
x[a[i][j]-'A'].x1=i,x[a[i][j]-'A'].y1=j;
flag[a[i][j]-'A']=1;
}
else
{
x[a[i][j]-'A'].x2=i,x[a[i][j]-'A'].y2=j;
}
}
if(a[i][j]=='#')
{
mark[i][j]=1;
}
}
}
q.push(make(x1,y1,0));
while(!q.empty())
{
point t=q.front();
q.pop();
for(int i=0;i<4;i++)
{
int tx=t.x+dx[i],ty=t.y+dy[i];
if(!tx||!ty||tx>n&&ty>m)
{
continue;
}
if(a[tx][ty]=='.'&&!mark[tx][ty])
{
q.push(make(tx,ty,t.z+1));
mark[tx][ty]=1;
}
if(a[tx][ty]>='A'&&a[tx][ty]<='Z')
{
if(tx==x[a[tx][ty]-'A'].x1&&ty==x[a[tx][ty]-'A'].y1)
{
if(!mark[x[a[tx][ty]-'A'].x2][x[a[tx][ty]-'A'].y2])
{
q.push(make(x[a[tx][ty]-'A'].x2,x[a[tx][ty]-'A'].y2,t.z+1));
mark[x[a[tx][ty]-'A'].x2][x[a[tx][ty]-'A'].y2]=1;
}
}
else
{
if(!mark[x[a[tx][ty]-'A'].x1][x[a[tx][ty]-'A'].y1])
{
q.push(make(x[a[tx][ty]-'A'].x1,x[a[tx][ty]-'A'].y1,t.z+1));
mark[x[a[tx][ty]-'A'].x1][x[a[tx][ty]-'A'].y1]=1;
}
}
}
if(a[tx][ty]=='=')
{
cout<<t.z+1<<endl;
return 0;
}
}
}
return 0;
}
```
by liqingyang @ 2020-04-19 17:33:18