求大佬给蒟蒻改代码
查看原帖
求大佬给蒟蒻改代码
348254
AK007楼主2020/11/3 14:26
#include<bits/stdc++.h>
using namespace std;
int n,m;
// int a[1010][3];
int f[110][110],dis[20010];
struct nod{
    int x,s;
    bool operator () (const nod &a,const nod &b){
        return a.s>b.s;
    }
};
int net[4][2]={0,1,1,0,0,-1,-1,0};
vector<nod> g[20010];
priority_queue<nod,vector<nod> ,nod> q;
int get_id(int a,int b){
    if(f[a][b]==0) return (a-1)*m+b;
    else return (a-1)*m+b+m*m;
}
bool vis[100000];
void dij(int qs){
    memset(dis,0x3f3f3f3f,sizeof(dis));
    nod t;
    t.x=qs,t.s=0;
    q.push(t);
    dis[qs]=0;
    while(!q.empty()){
        nod u=q.top();q.pop();
        if(vis[u.x]||u.s>dis[u.x]) continue;
        vis[u.x]=1;
        for(int i=0;i<g[u.x].size();i++){
            nod v=g[u.x][i];
            if(v.s+dis[u.x]<dis[v.x]){
                dis[v.x]=v.s+dis[u.x];
                nod tt;
                tt.x=v.x;
                tt.s=dis[v.x];
                q.push(tt);
            }
        }
    }
    int ans=0x3f3f3f3f;
    ans=min(dis[m+(m-1)*m],dis[2*m+(m-1)*m]);
    if(ans==0x3f3f3f3f) puts("-1");
    else printf("%d",ans);
}
int main(){
    scanf("%d%d",&m,&n);
    // memset(f,-1,sizeof(f));
    for(int i=1;i<=m;i++){
        for(int j=1;j<=m;j++){
            f[i][j]=-1;
        }
    }
    for(int i=1;i<=n;i++){
        int x,y,s;
        scanf("%d%d%d",&x,&y,&s);
        f[x][y]=s;
    }
    for(int i=1;i<=m;i++){
        for(int j=1;j<=m;j++){
            for(int k=0;k<4;k++){
                int tx=i+net[k][0],ty=j+net[k][1];
                if(tx<1||ty<1||tx>m||ty>m) continue;
                if(f[i][j]!=-1&&f[tx][ty]!=-1){
                    nod t;
                    t.x=get_id(tx,ty),t.s=(f[i][j]!=f[tx][ty]);
                    g[get_id(i,j)].push_back(t);
                }
                if(f[i][j]==-1&&f[tx][ty]!=-1){
                    nod t;
                    f[i][j]=0;
                    t.x=get_id(tx,ty),t.s=(2+(f[i][j]!=f[tx][ty]));
                    g[get_id(i,j)].push_back(t);
                    f[i][j]=1;
                    t.x=get_id(tx,ty),t.s=(2+(f[i][j]!=f[tx][ty]));
                    g[get_id(i,j)].push_back(t);
                    f[i][j]=-1;
                }
                if(f[i][j]!=-1&&f[tx][ty]==-1){
                    nod t;
                    f[tx][ty]=0;
                    t.x=get_id(tx,ty),t.s=2+(f[i][j]!=f[tx][ty]);
                    g[get_id(i,j)].push_back(t);
                    f[tx][ty]=1;
                    t.x=get_id(tx,ty),t.s=2+(f[i][j]!=f[tx][ty])
                    g[get_id(i,j)].push_back(t);
                    f[tx][ty]=-1;
                }
            }
        }
    }
    dij(get_id(1,1));
    return 0;
}
2020/11/3 14:26
加载中...