10pts,求调
查看原帖
10pts,求调
1045862
wleclare2011楼主2024/10/11 22:12

查了好久


#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[110][100]={0},m,n,vis[110][110],ans=0x3fffff;
int dx[10]={0,1,0,-1,0};
int dy[10]={0,0,1,0,-1};
void dfs(int x,int y,bool magic,int mon){
    if(x==n&&y==n){
        ans=min(ans,mon);
        return ;
    }
    if(vis[x][y]<=mon)return ;
    else vis[x][y]=mon;
    if(mon>ans)return;
    for(int i=1;i<=n;i++){
        int xx=dx[i]+x,yy=dy[i]+y;
        if(xx>=1&&xx<=m&&yy>=1&&yy<=m){
            if(a[x][y]!=0){
                if(a[x][y]!=a[xx][yy]){
                    dfs(xx,yy,magic,mon+1);
                }
                else{
                    dfs(xx,yy,magic,mon);
                }
            }
            else{
                if(magic){
                    magic=0;
                    a[x][y]=a[xx][yy];
                    dfs(xx,yy,magic,mon+2);
                    a[x][y]=0;
                }
            }
        }
    }
}
signed main(){
    // freopen("temp.in","r",stdin);
    // freopen("temp.out","w",stdout);
    memset(vis,0x3ffff,sizeof(vis));
    cin>>m>>n;
    for(int i=1;i<=n;i++){
        int x,y,c;
        cin>>x>>y>>c;
        a[x][y]=c+1;
        //nothing 0   red 1   yellow 2
    }
    dfs(1,1,1,0);
    if(ans!=0x3fffff)cout<<ans;
    else cout<<-1;
    return 0;
}
2024/10/11 22:12
加载中...