zoukankan      html  css  js  c++  java
  • poj 2907 Collecting Beepers (dfs)

    http://poj.org/problem?id=2907

    挺简单的一题,但是上来就给想错了。应该是按各个可用点搜索,累加各点间距离取最小,我想的是按坐标全搜,标记过程值。

    code:

    #include<cstdio>
    #include<cstring>
    using namespace std ;
    const int MAX = 1e8 ;
    int n, m, sx, sy, num, ans ;
    struct node{
        int x, y ;
        bool vis ;
    }bee[11] ;
    int dis(int p, int q){
        int dx = bee[p].x-bee[q].x<0?bee[q].x-bee[p].x:bee[p].x-bee[q].x ;
        int dy = bee[p].y-bee[q].y<0?bee[q].y-bee[p].y:bee[p].y-bee[q].y ;
        return dx + dy ;
    }
    void dfs(int sum, int p, int len){
        if(len>=ans)    return ;
        if(sum==num){
            int d = len+dis(p, 0) ;
            if(d<ans)  ans = d ;
            return ;
        }
        for(int i=1; i<=num; i++){
            if(!bee[i].vis){
                bee[i].vis = true ;
                dfs(sum+1, i, len+dis(p, i)) ;
                bee[i].vis = false ;
            }
        }
    }
    int main(){
        int t, x, y ;
        scanf("%d", &t) ;
        while(t--){
            scanf("%d%d", &n, &m) ;
            scanf("%d%d", &bee[0].x, &bee[0].y) ;
            scanf("%d", &num) ;
            for(int i=1; i<=num; i++){
                scanf("%d%d", &bee[i].x, &bee[i].y) ;
                bee[i].vis = false ;
            }
            ans = MAX ;
            dfs(000) ;
            printf("The shortest path has length %d\n", ans) ;
        }
        return 0 ;
    }

  • 相关阅读:
    第一次讲课
    请允许我悄悄的爱你一次好吗 zz
    装.NET实在是一种折磨,
    第一次听课
    路,在何方?
    UNION和UNION ALL 的区别
    利用jquery操作select下拉列表框
    理解 collate Chinese_PRC_CI_AS
    sql 中 case when 实例
    sql 中 case when 实例(2)
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2376095.html
Copyright © 2011-2022 走看看