0
已解决
李庚午
中级守护
中级守护
//code by LG♂W2016B02
#include<bits/stdc++.h>
using namespace std;
struct point
{
int x;int y;int step=0;
};
bool vis[2][105][105];
int dx[13];
int dy[13];
point a,b;
int bfs(int mode,int x,int y)
{
queue<point>team;
point t;
t.x=x;t.y=y;t.step=0;
while(!team.empty())
{
point p=team.front();
team.pop();
if (p.x==1&&p.y==1) return p.step;
for(int i=1;i<=12;i++)
{
if(p.x+dx[i]>0&&p.x+dx[i]<=100&&p.y+dy[i]>0&&p.y+dy[i]<=100&&!vis[mode][p.x+dx[i]][p.y+dy[i]])
{
point u;
u.x=p.x+dx[i];
u.y=p.y+dy[i];
u.step=p.step+1;
vis[mode][u.x][u.y]=true;
team.push(u);
}
}
}
}
int main()
{
dx[1]=2;dx[2]=2;dx[3]=2;dx[4]=2;dx[5]=-2;dx[6]=-2;dx[7]=-2;dx[8]=-2;dx[9]=1;dx[10]=1;dx[11]=-1;dx[12]=-1;
dy[1]=1;dy[2]=-1;dy[3]=2;dy[4]=-2;dy[5]=1;dy[6]=-1;dy[7]=2;dy[8]=-2;dy[9]=2;dy[10]=-2;dy[11]=2;dy[12]=-2;
memset(vis,false,sizeof(vis));
cin>>a.x>>a.y;
int ans1=bfs(1,a.x,a.y);
cin>>b.x>>b.y;
int ans2=bfs(2,b.x,b.y);
cout<<ans1<<endl<<ans2;
}
1
2
1
1
0
0
李庚午
中级守护
中级守护
加上PUSH操作之后得50分,RE五个点,仍然求解
//code by LG♂W2016B02
#include<bits/stdc++.h>
using namespace std;
struct point
{
int x;int y;int step=0;
};
bool vis[2][105][105];
int dx[13];
int dy[13];
point a,b;
int bfs(int mode,int x,int y)
{
queue<point>team;
point t;
t.x=x;t.y=y;t.step=0;
team.push(t);
while(!team.empty())
{
point p=team.front();
team.pop();
if (p.x==1&&p.y==1) return p.step;
for(int i=1;i<=12;i++)
{
if(p.x+dx[i]>0&&p.x+dx[i]<=100&&p.y+dy[i]>0&&p.y+dy[i]<=100&&!vis[mode][p.x+dx[i]][p.y+dy[i]])
{
point u;
u.x=p.x+dx[i];
u.y=p.y+dy[i];
u.step=p.step+1;
vis[mode][u.x][u.y]=true;
team.push(u);
}
}
}
}
int main()
{
dx[1]=2;dx[2]=2;dx[3]=2;dx[4]=2;dx[5]=-2;dx[6]=-2;dx[7]=-2;dx[8]=-2;dx[9]=1;dx[10]=1;dx[11]=-1;dx[12]=-1;
dy[1]=1;dy[2]=-1;dy[3]=2;dy[4]=-2;dy[5]=1;dy[6]=-1;dy[7]=2;dy[8]=-2;dy[9]=2;dy[10]=-2;dy[11]=2;dy[12]=-2;
memset(vis,false,sizeof(vis));
cin>>a.x>>a.y;
int ans1=bfs(1,a.x,a.y);
cin>>b.x>>b.y;
int ans2=bfs(2,b.x,b.y);
cout<<ans1<<endl<<ans2;
return 0;
}
0
0
0
0
0