当前位置: 首页 > news >正文

HDU1572:下沙小面的(2)(DFS)

下沙小面的(2)

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2309    Accepted Submission(s): 1010


Problem Description
前文再续,书接上一题。话说当上小面的司机的Lele在施行他的那一套拉客法则以后,由于走的路线太长,油费又贵,不久便亏本了。(真可怜~)于是他又想了一个拉客的办法。

对于每一次拉客活动,他一次性把乘客都拉上车(当然也不会超过7个,因为位置只有7个)。然后,Lele计算出一条路线(出于某些目的,Lele只把车上乘客的目的地作为这条路线上的站点),把所有乘客都送到目的地(在这路线上不拉上其他乘客),并且使总路线长度最短。

不过Lele每次都要花很多时间来想路线,你能写个程序帮他嘛?
 

Input
本题目包含多组测试。最后一组测试后有一个0代表结束。
每组测试第一行有一个整数NCity(3<=NCity<=30)表示下沙一共有多少个站点(站点从0开始标号)。
然后给你一个 NCity * NCity 的矩阵,表示站点间的两两距离。即这个矩阵中第 i 行 第 j 列的元素表示站点 i 和站点 j 的距离。(0<=距离<=1000)
再然后有一个整数K(1<=K<=7),表示Lele拉上车的人数。
接下来的一行里包括 K 个整数,代表上车的人分别要去的站点。(0<站点<NCity)

注意:
对于每组测试,Lele都是在站点0拉上乘客的。
 

Output
对于每一组测试,在一行内输出一个整数,表示最短路线的长度。
 

Sample Input

  
3 0 1 2 1 0 3 2 3 0 3 1 1 2 0
 

Sample Output

  
4
 

Author
linle
 

Source
HDU 2007-1 Programming Contest
思路:由于k值很小,而且只能由0点开始途径这k个点,直接dfs即可。

# include <iostream>
# include <cstdio>
# include <cstring>
# include <algorithm>
# define INF 0x3f3f3f3f
using namespace std;

int dis[31][31], a[8], vis[8], n, m;
int dfs(int icount, int pre, int now)
{
    if(icount == m)
        return dis[a[pre]][a[now]];
    int ans = INF;
    for(int i=1; i<=m; ++i)
        if(!vis[i])
        {
            vis[i] = 1;
            ans = min(dfs(icount+1, now, i), ans);
            vis[i] = 0;
        }
    return ans + dis[a[pre]][a[now]];
}

int main()
{
    while(~scanf("%d",&n),n)
    {
        memset(vis, 0, sizeof(vis));
        for(int i=0; i<n; ++i)
            for(int j=0; j<n; ++j)
                scanf("%d",&dis[i][j]);
        scanf("%d",&m);
        for(int i=1; i<=m; ++i)
            scanf("%d",&a[i]);
        a[0] = 0;
        printf("%d\n",dfs(0, 0, 0));
    }
    return 0;
}


转载于:https://www.cnblogs.com/junior19/p/6729951.html

相关文章:

  • Android-实现Animation everywhere
  • 使用agvtool更改app version/build
  • 关于position的小总结
  • 《剑指offer》二叉树镜像
  • 走向全栈之MongoDB的使用
  • RN开发之如何升级自己的本地RN项目
  • Android 倒计时的五种实现方式
  • Linux运维工程师如何找一份好工作?
  • 编码小结2
  • Nginx | 负载均衡(一)
  • VS链接错误: LNIK1123
  • Angular 2 DI - IoC DI - 1
  • 百度地图API标注+时间轴组件
  • Hinton神经网络公开课2 The Perceptron learning procedure
  • vs2017常用扩展
  • 2017 年终总结 —— 在路上
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java小白进阶笔记(3)-初级面向对象
  • Linux gpio口使用方法
  • MD5加密原理解析及OC版原理实现
  • PAT A1092
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • SQLServer之索引简介
  • 关于使用markdown的方法(引自CSDN教程)
  • 关于字符编码你应该知道的事情
  • 马上搞懂 GeoJSON
  • 前端技术周刊 2019-01-14:客户端存储
  • 区块链技术特点之去中心化特性
  • 什么是Javascript函数节流?
  • 小而合理的前端理论:rscss和rsjs
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • const的用法,特别是用在函数前面与后面的区别
  • Hibernate主键生成策略及选择
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​Linux·i2c驱动架构​
  • ​第20课 在Android Native开发中加入新的C++类
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (C语言)逆序输出字符串
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (poj1.2.1)1970(筛选法模拟)
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (七)Knockout 创建自定义绑定
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)C#调用WebService 基础
  • (转)我也是一只IT小小鸟
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法