悬赏一关注
查看原帖
悬赏一关注
747142
OIer_hzn楼主2023/1/13 08:54

我们老师就是这么写的,为什么不对?

//
//  main.cpp
//  IDE
//
//  Created by aa on 2022/12/30.
//
//


#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
#include <queue>
#include <cstdio>
using namespace std;
#define ll long long

const ll N=1000;
int fx[20]={0,1,0,-1};
int fy[20]={1,0,-1,0};
char a[N][N];
int d[N][N];
bool vis[N][N];
int n,m,s1,s2,e1,e2;
int ans=1e9;
void inp_io(){
    std::ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}
void DFS(int x,int y,int sum,int cl){
    if(x==n&&y==n){
        ans=min(sum,ans);
        return;
    }
    for(int i=0;i<4;i++){
        int tx=x+fx[i];
        int ty=y+fy[i];
        if(tx>=1&&tx<=n&&ty>=1&&ty<=n&&vis[tx][ty]){
            if(a[x][y]||a[tx][ty]){
                if(a[tx][ty]==0){
                    if(sum+2<d[tx][ty]){
                        vis[tx][ty]=0;
                        d[tx][ty]=sum+2;
                        DFS(tx,ty,sum+2,cl);
                        vis[tx][ty]=1;
                    }
                }
            }else{
                if(cl==a[tx][ty]&&sum<d[tx][ty]){
                    vis[tx][ty]=0;
                    d[tx][ty]=sum;
                    DFS(tx,ty,sum,cl);
                    vis[tx][ty]=1;
                }else if(sum+1<ans&&sum+1<d[tx][ty]){
                    vis[tx][ty]=0;
                    d[tx][ty]=sum+1;
                    DFS(tx,ty,sum+1,a[tx][ty]);
                    vis[tx][ty]=1;
                }
            }
        }
    }
}

int main(){
    inp_io();
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            d[i][j]=1e9;
            a[i][j]=0;
            vis[i][j]=1;
        }
    }
    while(m--){
        int _x,_y,w;
        cin>>_x>>_y>>w;
        a[_x][_y]=w+1;
    }
    vis[1][1]=0;
    DFS(1,1,0,a[1][1]);
    if(ans==1e9){
        cout<<-1<<endl;
    }else{
        cout<<ans<<endl;
    }
    return 0;
}

2023/1/13 08:54
加载中...