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;
    }
    
    
  • 相关阅读:
    RTC是DS1339,驱动采用的是rtc-ds1307.c
    hi3515 rtc驱动(ds1307/1339)驱动和示例
    qt5.4.1的imx6编译
    Python实现ID3(信息增益)
    Python实现nb(朴素贝叶斯)
    Python实现kNN(k邻近算法)
    Android实现地图服务
    Android实现传感器应用及位置服务
    Android实现KSOAP2访问WebService
    Android实现网络访问
  • 原文地址:https://www.cnblogs.com/MYsBlogs/p/10930487.html
Copyright © 2011-2022 走看看