我是哈利波特,我怎么不知道我还干这事来着/yiw
by ytyuhuan @ 2023-07-25 11:27:20
讨论区惊现哈利波特
by Uvocde @ 2023-07-25 11:32:47
@[xiakexiaolong](/user/225797) 你既然是哈利波特,那可以帮我用魔法发现代码的错误吗?
by _wakeup @ 2023-07-25 11:34:24
@[xiakexiaolong](/user/225797) 还行,下一个
by Zjc20120331 @ 2023-07-25 11:43:51
应该行了
```
#include<bits/stdc++.h>
using namespace std;
char a[2005][2005];
int bj[2005][2005];
struct node{
int x,y,setp;
}q[10000005];
int n,m;
int dx[9]={0,1,-1,0,0,1,-1,1,-1};
int dy[9]={0,0,0,1,-1,-1,1,1,-1};
void dfs(int x,int y,int i)
{ //朝第 i个方向移动一步
if(x<1||x>n||y<1||y>m||a[x][y]=='X') return ;
bj[x+dx[i]][y+dy[i]]=2;
dfs(x+dx[i],y+dy[i],i);
}
void bfs(int x,int y)
{
int h=1,t=1,nowx,nowy,setp;
//起点入队
q[1].x=x; q[1].y=y; q[1].setp=0;
while(h<=t)
{ nowx=q[h].x,nowy=q[h].y,setp=q[h].setp;
for(int i=1;i<=4;i++)
{ int xx=nowx+dx[i];
int yy=nowy+dy[i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]!='X'&&bj[xx][yy]!=1)
{
if(bj[xx][yy]==2)
{ cout<<setp+1<<endl; return; }
bj[xx][yy]=1;
node s;
s.x=xx;s.y=yy;s.setp=setp+1;
q[++t]=s;
}
}
h++;
}
cout<<"Poor Harry"<<endl;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
while(1)
{
int tx,ty,sx,sy;
cin>>tx>>ty>>sx>>sy;
if(tx==0&&ty==0&&sx==0&&sy==0) break;
memset(bj,0,sizeof(bj));
for(int i=1;i<=8;i++) dfs(tx,ty,i);
bj[tx][ty]=2;
if(bj[sx][sy]==2)
{
cout<<0<<endl;
continue;
}
bj[sx][sy]=1;
bfs(sx,sy);
}
return 0;
}
```
by bei_awa @ 2023-07-25 11:47:32
@[_wakeup](/user/666741)
by bei_awa @ 2023-07-25 11:47:57
@[_wakeup](/user/666741) 能给我的B站点个关注吗 我的B站链接在我主页
by bei_awa @ 2023-07-25 11:49:58
@[bei_awa](/user/664284) 您这是又重写了一遍?%%%
by _wakeup @ 2023-07-25 11:50:21
@[bei_awa](/user/664284) 可以,给你两个
by _wakeup @ 2023-07-25 11:50:52
_wakeup 这题我做过
by bei_awa @ 2023-07-25 11:52:28