201409-4 最优配餐
题目
思路
- 从各个分店同时bfs,走到客户家了再结算给该客户(们)送餐费用,送完所有客户的餐就退出。
- 可以想象成m个外卖小哥同时从各分店出发,谁先送到谁的就算数,送到一个就结算一个的钱。 注意这里的ans需要用 long long保存,其可能的最大值是2* n * k *1000,超过了int范围。
AC代码如下
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
struct point{
int x,y;
};
struct node{
//供bfs用,step统计步数,不需要统计每个结点的实时费用
int x,y,step;
};
int g[1005][1005]={
0},n,m,k,d;
vector<point> store;
bool inq[1005][1005]={
false};
int X[4]={
0,-1,0,1};//向左上右下扩散
int Y[4]={
-1,0,1,0};
long long bfs(){
long long ans=0,cnt=0;
queue<node> q;
for(int i=0;i<store.size();i++){
//所有外卖小哥从各大分店入列
q.push((node){
store[i].x,store[i].y,0});
inq[store[i].x][store[i].y]=true;
}