如果发现广告等破坏行为,请尽量将条目恢复到较早的版本而不是把相应内容直接删除,谢谢合作。

URAL/1377

来自"NOCOW"

跳转到: 导航, 搜索

两遍bfs。。。各种水题。

#include <cstdio>
#include <cstdlib>
#include <cstring>
const int mov[4][2]={1,0,0,1,-1,0,0,-1};
struct node
{
    int x,y;
    node()
    {
        x=y=0;
    }
}u,v,a,b;
bool f[102][102]={false},g[102][102]={false};
int n,m,t1=0,t2=0;
void bfs(bool visit[102][102],const node& t,int& step)
{
    int dire=0;
    u.x=u.y=1;
    while (true)
    {
        visit[u.y][u.x]=true;
        if ((u.x == t.x) && (u.y == t.y))
            return;
        ++step;
        for (int i=dire;(i+1&3)!=dire;i=(i+1&3))
        {
            v.x=mov[i][0]+u.x;
            v.y=mov[i][1]+u.y;
            if (!visit[v.y][v.x])
            {
                u=v;
                dire=i;
                break;
            }
        }
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    scanf("%d%d",&a.y,&a.x);
    scanf("%d%d",&b.y,&b.x);
    for (int i=0;i<=n+1;++i)
        f[i][0]=f[i][m+1]=true;
    for (int i=0;i<=m+1;++i)
        f[0][i]=f[n+1][i]=true;
    memcpy(g,f,sizeof(f));
    bfs(f,a,t1);
    bfs(g,b,t2);
    if (t1 < t2)
    {
        t1^=t2;
        t2^=t1;
        t1^=t2;
    }
    printf("%d\n",t1-t2);
    return 0;
}
//by zzy
个人工具