棋盘

一群人用广搜做,写了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";
}

  ......

原文地址:https://www.cnblogs.com/dai-jia-ye/p/9364485.html