90pts求助(玄关)
查看原帖
90pts求助(玄关)
1287433
__ycy1124__楼主2024/9/27 13:46
#include<bits/stdc++.h>
#define int long long int
using namespace std;
struct Node{
    int p,w,las; 
};
int c[21];
int ans[1001][21];
queue <Node> q;
int n,m;
void bfs(int p,int w,int las){
//	printf("%d %d %d\n",p,w,las);
    ans[p][las]=w;
    for(int i=1;i<=m;i++){
        int newFloor=p+c[i];
        if(newFloor>=1&&newFloor<=n&&((ans[newFloor][i]==-1)||(w+abs(las-i)+abs(c[i]*2)<ans[newFloor][i]))){
            q.push({newFloor,w+abs(las-i)+abs(c[i]*2),i});
            ans[newFloor][i]=w+abs(las-i)+abs(c[i]*2);
        }
    }
}
signed main(){
    scanf("%lld%lld",&n,&m);
    int az;
    for(int i=1;i<= m;i++){
        scanf("%lld",&c[i]);
        if(c[i]==0){
            az=i;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            ans[i][j]=-1;
        }
    }
    q.push({1,0,az});
    while(!q.empty()){
        bfs(q.front().p,q.front().w,q.front().las);
        q.pop();
    }
    int js=-1;
    for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			printf("%d ",ans[i][j]);
		}
		printf("\n");
	}
    for(int i=1;i<=m;i++){
        if(ans[n][i]!=-1){
            if(js==-1){
                js=ans[n][i];
            }
            else{
                js=min(js,ans[n][i]);
            }
        }
    }
    printf("%lld",js);  
    return 0;
}
2024/9/27 13:46
加载中...