• 棋盘


    一群人用广搜做,写了180多行的代码......我的深搜只写了85行......代码:

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int n,m;
    int a[1100][1100],y1[4]={1,-1,0,0},x1[4]={0,0,1,-1};
    int ans[1100][1100];
    int x,y,z;
    void sou(int x,int y,int k)
    {
        for(int i=0;i<=3;i++)
        {
            int h1=x+x1[i],h2=y+y1[i];
            if(h1<1||h1>n||h2<1||h2>n) continue;//判断越界 
            if(a[h1][h2]!=0)//如果有颜色
            {
                if(a[x][y]==0)
                {
                    if(k==a[h1][h2])//颜色一样
                    {
                        if(ans[h1][h2]>ans[x][y])
                        {
                            ans[h1][h2]=ans[x][y];
                            sou(h1,h2,a[x][y]);
                        }
                    }
                    else
                    {
                        if(ans[h1][h2]>ans[x][y]+1)//颜色不一样,+1 
                        {
                            ans[h1][h2]=ans[x][y]+1;
                            sou(h1,h2,a[x][y]);
                        }
                    }
                }
                else
                {
                    if(a[h1][h2]==a[x][y])
                    {
                        if(ans[h1][h2]>ans[x][y])
                        {
                            ans[h1][h2]=ans[x][y];
                            sou(h1,h2,a[x][y]);
                        }
                    }
                    else
                    {
                        if(ans[h1][h2]>ans[x][y]+1)
                        {
                            ans[h1][h2]=ans[x][y]+1;
                            sou(h1,h2,a[x][y]);
                        }
                    }
                }
            }
            else//没颜色 
            {
                if(a[x][y]==0) continue;
                if(ans[h1][h2]>=ans[x][y]+2)//花两块钱 
                {
                    ans[h1][h2]=ans[x][y]+2;
                    sou(h1,h2,a[x][y]);
                }
            }
        }
    }
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=m;i++)
        {
            cin>>x>>y>>z;
            a[x][y]=z+1;//我从一开始 
        }
        memset(ans,127,sizeof(ans));//初始化 
        ans[1][1]=0;
        sou(1,1,1);
        if(ans[n][n]!=2139062143)
        {
            cout<<ans[n][n];
        }
        else cout<<"-1";
    }
    

      ......

  • 相关阅读:
    request相关
    C#请求接口
    qml_base
    web
    entry
    listbox
    Canvas
    pickle
    c#枚举
    数据结构——树
  • 原文地址:https://www.cnblogs.com/dai-jia-ye/p/9364485.html
Copyright © 2020-2023  润新知