为什么函数里的if一直不进,蒟蒻求助
查看原帖
为什么函数里的if一直不进,蒟蒻求助
669325
Undead楼主2022/3/23 20:45
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define oo 0x37ff777777
ll n,m,a,b,c,mmap[1010][1010],cnt,dis[1010][1010],ans1[1010][1010],ans2[1010][1010],ans3[1010][1010],mmin=0x3f3f3f3f3f3f;
ll mx[4]={0,0,-1,1};
ll my[4]={1,-1,0,0};
struct node{
	ll x,y,v;
	bool operator < (const node &e2)const{
		return v>e2.v;
	}
}point;
void djstl(ll starh,ll starz,ll dis[][1010]){
	priority_queue<node> mq;
	ll i;
	point.x=starh;
	point.y=starz;
	point.v=mmap[starh][starz];
	while(!mq.empty()){
		node now=mq.top();
		mq.pop();
		for(i=0;i<4;i++){
			int tx=now.x+mx[i];
			int ty=now.y+my[i];
			if(tx>n || tx<1 || ty>m || ty<1) continue;
				if(dis[tx][ty]>now.v+mmap[tx][ty]){
				dis[tx][ty]=now.v+mmap[tx][ty];
				node t;
				t.x=tx;
				t.y=ty;
				t.v=dis[tx][ty];
				mq.push(t);
			}
		}
	}
}
int main(){
	ll i,j;
	cin>>n>>m>>a>>b>>c;
	for(i=n;i>=1;i--){
		for(j=1;j<=m;j++){
			cin>>mmap[i][j];
			ans1[i][j]=oo;
			ans2[i][j]=oo;
			ans3[i][j]=oo;
			dis[i][j]=mmap[i][j];
		}
	}
	djstl(1,a,ans1);
	djstl(n,b,ans2);
	djstl(n,c,ans3);
	for(i=n;i>=1;i--){
		for(j=1;j<=m;j++){
		if(ans1[i][j]+ans2[i][j]+ans3[i][j]-2*mmap[i][j]<mmin){
			mmin=ans1[i][j]+ans2[i][j]+ans3[i][j]-(2*mmap[i][j]);
			}
		}
	}
	cout<<mmin;
	return 0;
}
2022/3/23 20:45
加载中...