首页 > 其他 > 详细

bfs最优配餐

时间:2020-08-22 08:13:08      阅读:78      评论:0      收藏:0      [点我收藏+]

题目大意:

栋栋最近开了一家餐饮连锁店,提供外卖服务。随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题。
  栋栋的连锁店所在的区域可以看成是一个n×n的方格图(如下图所示),方格的格点上的位置上可能包含栋栋的分店(绿色标注)或者客户(蓝色标注),有一些格点是不能经过的(红色标注)。
  方格图中的线表示可以行走的道路,相邻两个格点的距离为1。栋栋要送餐必须走可以行走的道路,而且不能经过红色标注的点。

技术分享图片
  送餐的主要成本体现在路上所花的时间,每一份餐每走一个单位的距离需要花费1块钱。每个客户的需求都可以由栋栋的任意分店配送,每个分店没有配送总量的限制。
  现在你得到了栋栋的客户的需求,请问在最优的送餐方式下,送这些餐需要花费多大的成本。

一眼看过去就是bfs求最短路 多源点的只要在开始的时候把所有的源点加进队列就可以了

代码:

#include <iostream>
#include <queue>
#include <map>
using namespace std;
const int N= 1e6+10;
int g[1010][1010],dis[1010][1010],vi[1010][1010];
pair<int,int> p[N];
map<pair<int,int>,int> mp;

int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int main(){
    int n,m,k,d;
    cin>>n>>m>>k>>d;
    queue<pair<int,int>> q;
    for(int i=0;i<m;i++){
        int x,y;
        cin>>x>>y;
        g[x][y]=1;
        vi[x][y]=1;
        q.push(make_pair(x,y));
    }
    for(int i=0;i<k;i++){
        int x,y,c;
        cin>>x>>y>>c;
        p[i].first=x;
        p[i].second=y;
        if(mp[make_pair(x,y)]){
            mp[make_pair(x,y)]+=c;
        }
        else mp[make_pair(x,y)]+=c;
    }
    for(int i=0;i<d;i++){
        int x,y;
        cin>>x>>y;
        g[x][y]=2;
    }
    while(q.size()){
        pair<int,int> t=q.front();
        q.pop();
        int x=t.first;
        int y=t.second;
        for(int j=0;j<4;j++){
            int nx=x+dx[j];
            int ny=y+dy[j];
            if(nx>=1&&nx<=n&&ny>=1&&ny<=n){
                if(vi[nx][ny])continue;
                if(g[nx][ny]==2)continue;
                dis[nx][ny]=dis[x][y]+1;
                vi[nx][ny]=1;
                q.push(make_pair(nx,ny));
            }
        }
    }
    long long res=0;
    for(int i=0;i<k;i++){
        res+=(dis[p[i].first][p[i].second])*1ll*(mp[make_pair(p[i].first,p[i].second)]);
    }
    cout<<res<<endl;
}

 

bfs最优配餐

原文:https://www.cnblogs.com/kstranger/p/13543938.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!