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 ;
}

转载于:https://www.cnblogs.com/xiaolongchase/archive/2012/03/01/2376095.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值