希望更丰富的展现?使用Markdown
by King_of_gamers @ 2018-10-31 13:21:27
>>>>>希望更丰富的展现?使用Markdown
by Everlasting_Snow @ 2018-10-31 13:21:54
怎么弄的啊 新手不会
by 2018zhongyanbin @ 2018-10-31 13:22:42
希望更丰富的展现?使用Markdown
by double_cm @ 2018-10-31 13:24:41
```
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
bool map[21000],v[21000];
struct node
{
int x,y,dep;
}list[210000];
int dx[]={0,0,1,-1,-1,1,-1,1};
int dy[]={1,-1,0,0,-1,1,1,-1};
int n,m,stx,sty,edx,edy;
bool check(int x,int y)
{
int t;
if(x==edx)
{
if(edy>y)t=0;
else t=1;
}
else if(y==edy)
{
if(edx>x)t=2;
else t=3;
}
else if((x-edx)==(y-edy))
{
if(edx<x)t=4;
else t=5;
}
else if(-(x-edx)==(y-edy))
{
if(edx>x)t=6;
else t=7;
}
else return false;
bool bbk=false;
int xx=x+dx[t],yy=y+dy[t];
while(map[(xx-1)*m+yy])
{
if(xx==edx&&yy==edy)bbk=true;
if(bbk)break;
xx+=dx[t];yy+=dy[t];
}
return bbk;
}
int main()
{
scanf("%d%d",&n,&m);
memset(map,false,sizeof(map));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
char x;cin>>x;
if(x=='O')map[(i-1)*m+j]=true;
}
while(scanf("%d%d%d%d",&edx,&edy,&stx,&sty)!=EOF)
{
if(stx==0&&sty==0&&edx==0&&edy==0)break;
memset(v,true,sizeof(v));v[(stx-1)*m+sty]=false;
bool bk=false;
for(int i=0;i<=7;i++)
{
int xx=edx+dx[i],yy=edy+dy[i];
if(map[(xx-1)*m+yy]){bk=true;break;}
}
if(!bk){printf("Poor Harry\n");continue;}
list[1].x=stx;list[1].y=sty;list[1].dep=0;
int head=1,tail=1;bk=false;
if(check(stx,sty)){printf("0\n");continue;}
while(head<=tail)
{
int x=list[head].x,y=list[head].y;
for(int i=0;i<=3;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&v[(xx-1)*m+yy]&&map[(xx-1)*m+yy])
{
v[(xx-1)*m+yy]=false;
if(check(xx,yy))
{
printf("%d\n",list[head].dep+1);
bk=true;break;
}
tail++;
list[tail].x=xx;list[tail].y=yy;
list[tail].dep=list[head].dep+1;
}
}
if(bk)break;
head++;
}
if(!bk)printf("Poor Harry\n");
}
return 0;
}
```
by 2018zhongyanbin @ 2018-10-31 13:29:57
%%%ZYB大佬太强了
by MZW_BG @ 2018-10-31 13:30:19
没有大佬吗
by 2018zhongyanbin @ 2018-10-31 13:43:01