zoukankan      html  css  js  c++  java
  • 棋盘

    传送门

    此题为2017普及组T3

    思路较为简单,一个广搜就足够了

    但是写什么一定要清楚

    别像我一样不小心加上这句话调了半年

    temp[x][y]=0;
    

    代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #define max(x,y) ((x)>(y)?(x):(y))
    #define min(x,y) ((x)<(y)?(x):(y))
    #define rep(i,a,b) for(int i=(a);i<=(b);++i)
    #define dwn(i,a,b) for(int i=(a);i>=(b);--i)
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> P;
    int n,m,a[1010][1010],d[1010][1010],temp[1010][1010];
    int dictx[4]={1,-1,0,0},dicty[4]={0,0,1,-1};
    queue<P> que;
    void bfs()
    {
        d[1][1]=0;
        que.push(P(1,1));
        while(!que.empty())
        {
            int x=que.front().first,y=que.front().second;
            que.pop();
            if(x*y==0) continue;
            for(int i=0;i<4;++i)
            {
                int dx=dictx[i],dy=dicty[i];
                if(a[x+dx][y+dy]==0&&a[x][y]!=0)
                {
                    if(d[x+dx][y+dy]>d[x][y]+2)
                    {
                        d[x+dx][y+dy]=d[x][y]+2;
                        temp[x+dx][y+dy]=a[x][y];
                        que.push(P(x+dx,y+dy));
                    }
                    else if(d[x+dx][y+dy]==d[x][y]+2)
                    {
                        if(temp[x+dx][y+dy]!=a[x][y])
                            temp[x+dx][y+dy]=10;
                    }
                }
                if(a[x+dx][y+dy]!=0&&a[x][y]!=0&&a[x][y]!=a[x+dx][y+dy])
                {
                    if(d[x+dx][y+dy]>d[x][y]+1)
                    {
                        d[x+dx][y+dy]=d[x][y]+1;
                        que.push(P(x+dx,y+dy));
                    }
                }
                if(a[x+dx][y+dy]!=0&&a[x][y]==0)
                {
                    if(temp[x][y]==a[x+dx][y+dy]||temp[x][y]==10)
                    {
                        if(d[x+dx][y+dy]>d[x][y])
                        {
                            d[x+dx][y+dy]=d[x][y];
                            que.push(P(x+dx,y+dy));
                        }
                    }
                    else if(temp[x][y]!=0)
                    {
                        if(d[x+dx][y+dy]>d[x][y]+1)
                        {
                            d[x+dx][y+dy]=d[x][y]+1;
                            que.push(P(x+dx,y+dy));
                        }
                    }
                    //temp[x][y]==0;
                }
                if(a[x+dx][y+dy]!=0&&a[x][y]!=0&&a[x][y]==a[x+dx][y+dy])
                {
                    if(d[x+dx][y+dy]>d[x][y])
                    {
                        d[x+dx][y+dy]=d[x][y];
                        que.push(P(x+dx,y+dy));
                    }
                }
            }
        }
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        memset(d,127,sizeof(d));
        rep(i,1,m)
        {
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            a[x][y]=z+1;
        }
        bfs();
        if(d[n][n]!=d[0][0])
        {
            printf("%d
    ",d[n][n]);
        }
        else printf("-1
    ");
        return 0;
    }
    
    
  • 相关阅读:
    DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践
    UVA10071 Back to High School Physics
    UVA10071 Back to High School Physics
    UVA10055 Hashmat the Brave Warrior
    UVA10055 Hashmat the Brave Warrior
    UVA458 The Decoder
    UVA458 The Decoder
    HDU2054 A == B ?
    HDU2054 A == B ?
    POJ3414 Pots
  • 原文地址:https://www.cnblogs.com/MYsBlogs/p/10930487.html
Copyright © 2011-2022 走看看