10分求调
  • 板块P2083 找人
  • 楼主xiangxiyu
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/2 22:16
  • 上次更新2023/11/3 10:54:20
查看原帖
10分求调
769233
xiangxiyu楼主2023/11/2 22:16
#include<bits/stdc++.h>
using namespace std;
int n,m,v,g,h,mx=0x3f,mi,ni;
bool cnt[1005][1005];
struct p{
	int u,k;
}a[1005][1005];
int dfs(int x,int y,int ans){
	cnt[x][y]=1;
	if(x==g && y==h){
		ni=1;
		return ans;
	}
	if(ans>=mx){
		return 0x3f;
	}
	if(a[x][y].u!=x){
		if(cnt[a[x][y].u][a[x][y].k]==1 && ni==0){
			mi=1;
			return 0x3f;
		}
		dfs(a[x][y].u,a[x][y].k,ans+abs((a[x][y].u-x)*v));
	}
	else{
		if(cnt[a[x][y].u][a[x][y].k]==1 && ni==0){
			mi=1;
			return 0x3f;
		}
		dfs(a[x][y].u,a[x][y].k,ans);
	}
}
int main(){
	cin>>n>>m>>v>>g>>h;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j].u>>a[i][j].k;
		}
	} 
	for(int i=1;i<=m;i++){
		memset(cnt,0,sizeof cnt);
		mx=min(dfs(1,i,0),mx);
	}
	if(mi==1 && ni==0) cout<<"impossible";
	else cout<<mx;
	
}
2023/11/2 22:16
加载中...