码迷,mamicode.com
首页 > 其他好文 > 详细

小白月赛22 D : 收集纸片

时间:2020-02-23 22:19:22      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:图片   int start   amp   小白   bfs   http   技术   int   题目   

D:收集纸片

技术图片

考察点 : 全排列,对数据范围的估计程度
坑点  : 注意算最后回到初始的那步距离

析题得侃 :

一看题目最短路,诶呦,这不是最拿手的 BFS 走最短路吗?哈哈,定睛一看
这么多目的地,这还走个茄子,但是看看这道题的数据范围, 10,这不就完完
全全的可以暴力一发了,怎么暴力呢 ? 
我们并不知道那条线路会是最优的,所以我们可以用全排列列举出每一条线路,
然后最后取最小值即可。

Code :

#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>

#define INF 0x3f3f3f3f

#define x first
#define y second

using namespace std;

const int maxn = 25;

typedef pair<int,int>PII;

int T,n,res;
int start_x,start_y,end_x,end_y;

int a[maxn];

PII P[maxn];

int main(void) {
    int dist(int x,int y);
    void solve();
    scanf("%d",&T);
    while(T --) {
        scanf("%d%d",&end_x,&end_y);
        scanf("%d%d",&start_x,&start_y);
        scanf("%d",&n);
        for(int i = 1; i <= n; i ++) {
            scanf("%d%d",&P[i].x,&P[i].y);
        }
        P[n + 1].x = start_x,P[n + 1].y = start_y;
        res = INF;
        solve();
        printf("The shortest path has length %d\n",res);
    }
    return 0;
}

int dist(int ax,int ay,int bx,int by) {
    return abs(ax - bx) + abs(ay - by);
}

void solve() {
        // 拿 a 数组的不同排列作为我们走的每条线路
    for(int i = 1; i <= n; i ++) {
        a[i] = i;
    }
    do {
        int ans = 0;
        for(int i = 1; i <= n; i ++) {
            if(P[a[i]].x > end_x || P[a[i]].y > end_y) continue;
            if(i == 1) ans += dist(start_x,start_y,P[a[i]].x,P[a[i]].y);
            else ans += dist(P[a[i]].x,P[a[i]].y,P[a[i - 1]].x,P[a[i - 1]].y); 
        }
                // 回到起点
        ans += dist(start_x,start_y,P[a[n]].x,P[a[n]].y);
        res = min(res,ans);

    } while(next_permutation(a + 1,a + 1 + n));
    return ;
}

后记:

一定要观察数据范围,根据数据范围采取对应的策略

小白月赛22 D : 收集纸片

标签:图片   int start   amp   小白   bfs   http   技术   int   题目   

原文地址:https://www.cnblogs.com/prjruckyone/p/12354295.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!