• P3956 棋盘——普及题,儿童搜索


    P3956 棋盘

    这道搜索弄得我很难受。

    第一,一定要看清楚题在写。第二,弄清楚判断条件;

    首先图的大小是m*m不是n*m;

    然后就是当前有颜色的点是不用变颜色的;

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=1010;
    int f[maxn][110];
    int n,m;
    int mp[maxn][110];
    int ans=2147483647;
    int xx[4]={0,0,1,-1};
    int yy[4]={1,-1,0,0};
    void dfs(int x,int y,int sum,int flag)
    {
        if(sum>=f[x][y]) return ;
        f[x][y]=sum;
        if(x==m&&y==m)
        {
            ans=min(ans,sum);
            return ;
        }
        for(int i=0;i<4;i++)
        {
            int fx=x+xx[i];
            int fy=y+yy[i];
            if(fx<1||fx>m||fy<1||fy>m) continue ;
            if(mp[fx][fy])
            {
                if(mp[fx][fy]==mp[x][y])
                {
                    dfs(fx,fy,sum,0);
                }
                else dfs(fx,fy,sum+1,0);
            }
            else if(!flag)
            {
                mp[fx][fy]=mp[x][y];
                dfs(fx,fy,sum+2,1);
                mp[fx][fy]=0;
            }
        }
    }
    int main()
    {
        memset(f,0x7f,sizeof(f));
        scanf("%d%d",&m,&n);
        for(int i=1;i<=n;i++)
        {
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            if(z==1) mp[x][y]=1;
            else if(z==0) mp[x][y]=2;
        }
        dfs(1,1,0,0);
        if(ans==2147483647) printf("-1");
        else printf("%d",ans);
        return 0;
    }
  • 相关阅读:
    学习python第六天
    学习python第五天
    学习python第四天
    学习python第二天
    网工学Python——模块和包
    网工学Python——初识函数
    网工学Python——常用模块
    网工学Python——基础知识
    网工学Python——目录
    Python-面向对象
  • 原文地址:https://www.cnblogs.com/WHFF521/p/11646701.html
Copyright © 2020-2023  润新知