题目:

Description

一个邮递员从邮局出发,需要去 n - 2个城市送信,送完信件以后回家。

邮局在城市 1,家在城市 n,任意两个城市之间都有道路,但是这些道路是单向,也就是说 a 到 b 和 b 到 a 的路径长度不一定是一样的。

他必须经过每个城市一次,并且不能重复经过,最后回到家里。

现在要求你计算他需要经过的路径总和的最小长度。

Input

第一行有一个整数 n(2≤ n ≤ 10)。

接下里输入一个 n × n 的邻接矩阵 G, G[i][j] 表示从 i 走到 j 的路径长度。

Output

输出一个整数表示最小经过的路径总长度。

Sample Input 1 

4
0 1 1 1
1 0 2 1
5 5 0 6
1 1 3 0
Sample Output 1 7
Source 计蒜客

当我第一眼看到这道题时,顿时傻眼了这是什么题啊?

 a 到 b 和 b 到 a 的路径长度不一定是一样的。

这是几个意思?算了,我们可是OIer,不要用正常人的眼光来看这些题。

也就是说,这道题的图是一个有向图,所以又要请出我们的动态数组vector了。

这道题的大致思路就是DFS求出所有方案数,求出一个和目前已知最优方案比一下。

具体代码:

#include <bits/stdc++.h>
using namespace std;
int n;
bool vis[1010];
struct node{
int v;
int w;
node(){};
node(int _v,int _w){
v=_v;
w=_w;
} //构造函数
};//
int ans=0x3f3f3f3f;
vector <node>g[15];
void dfs(int u,int k,int sum){
if(u==n&&k==n){
ans=min(ans,sum);
return;
}//走完了,和目前已知最小值比一下
vis[u]=1;
for (int i=0;i<g[u].size();i++){
if(!vis[g[u][i].v]){
dfs(g[u][i].v,k+1,sum+g[u][i].w);//代码核心
}
}
vis[u]=0;
}
int main(){
cin >>n;
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
int w;
cin>>w;
g[i].push_back(node(j,w));//放进动态数组
}
}
dfs(1,1,0);//调用函数
cout << ans;
return 0;
}

YCOJ中国邮递员问题的更多相关文章

  1. LightOJ1086 Jogging Trails(欧拉回路+中国邮递员问题+SPFA)

    题目求从某点出发回到该点经过所有边至少一次的最短行程. 这个问题我在<图论算法理论.实现及应用>中看过,是一个经典的问题——中国邮递员问题(CPP, chinese postman pro ...

  2. YCOJ过河卒C++

    过河卒是一道~~较简单 的问题,用递归或者动态规划都可以完成,但今天主要不是递归或者动态规划,而是用深度优先搜索做的.虽然会有两组TLE~~ 深搜是一种向下搜索的算法(如图所示) 它能有效的统计中点到 ...

  3. YCOJ单向公路

    题目: 描述 某地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,并且有的公路并不能双向行驶.现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一个城镇到达另 ...

  4. YCOJ黑熊过河

    Description 有一只黑熊想过河,但河很宽,黑熊不会游泳,只能借助河面上的石墩跳过去,他可以一次跳一墩,也可以一次跳两墩,但是每起跳一次都会耗费一定的能量,黑熊最终可能因能量不够而掉入水中,所 ...

  5. poj 2404 中国邮递员问题 欧拉回路判定+状压dp

    /* 状压dp 邮递员问题:求经过任意点出发经过每一条边一次并回到原点. 解法:1.如果是欧拉回路那么就是所有的边的总和. 2.一般的解法,找出所有的奇度顶点,任意两个顶点匹配,即最小完美匹配,可用状 ...

  6. 贪心算法:旅行商问题(TSP)

    TSP问题(Traveling Salesman Problem,旅行商问题),由威廉哈密顿爵士和英国数学家克克曼T.P.Kirkman于19世纪初提出.问题描述如下: 有若干个城市,任何两个城市之间 ...

  7. BOM和DOM详解

    DOM介绍 D(文档)可以理解为整个Web加载的网页文档,O(对象)可以理解为类似window对象只来的东西,可以调用属性和方法,这里我们说的是document对象,M(模型)可以理解为网页文档的树形 ...

  8. 算法设计手冊(第2版)读书笔记, Springer - The Algorithm Design Manual, 2ed Steven S.Skiena 2008

    The Algorithm Design Manual, 2ed 跳转至: 导航. 搜索 Springer - The Algorithm Design Manual, 2ed Steven S.Sk ...

  9. [UVa10296]Jogging Trails

    题目大意: 中国邮递员问题. 给你一个无向带权连通图,求经过所有边并返回起点的最短路径. 思路: Edmonds-Johnson算法. 显然,当原图为欧拉图时,答案即为其欧拉回路的长度. 考虑原图不存 ...

随机推荐

  1. Baby Step Giant Step model

    ******************************************** */ #include <stdio.h> #include <string.h> # ...

  2. markdown 插入latex公式练习

    markdown 插入latex公式 $$公式$$表示行间公式,本来Tex中使用\(公式\)表示行内公式,但因为Markdown中\是转义字符,所以在Markdown中输入行内公式使用\\(公式\\) ...

  3. 9.Laravel5学习笔记:在laravel中注冊自己的服务到容器中

    问题描写叙述 或许标题写的不够清楚.实际情况是,在我使用laravel的过程中.须要将自己的一个类,通过服务提供者注冊到IOC容器中,可是在实际操作过程中.出现了下面错误: Unresolvable ...

  4. 抓包工具Fiddler使用宝典之捕获手机报文

    Fiddler 是通过代理来实现数据捕获的.对 Android 手机来说,也是通过将网络连接的代理指向 PC 机的 Fiddler port.来实现数据包的拦截. 以下,我以我的一次实践为例,向大家介 ...

  5. Hibernate学习(1)简单介绍

    1.什么是Hibernate?           首先,Hibernate是数据持久层的一个轻量级框架.数据持久层的框架有非常多比方:iBATIS,myBatis,Nhibernate,Siena等 ...

  6. Ubuntu16.04下安装Tensorflow CPU版本(图文详解)

    不多说,直接上干货! 推荐 全网最详细的基于Ubuntu14.04/16.04 + Anaconda2 / Anaconda3 + Python2.7/3.4/3.5/3.6安装Tensorflow详 ...

  7. JQuery实现表格行的上移、下移、删除、增加

    <%@ page language="java" import="java.util.*" pageEncoding="GBK"%&g ...

  8. iOS开发中正则式的使用

    iOS开发中正则式的使用 第一:常规的使用方式 NSString *str = @"abcded111093212qweqw"; //找到内部一个即可 NSString *patt ...

  9. NHibernate查询导致Update问题

    用NHibernate,总感觉怪事多罗罗. 比如说,明明我们是在查询,却报错,刨根问底找到出错原因,竟然是因为执行了一些Update甚至Insert!老天,我们明明只是查询而已,什么时候有更新过数据? ...

  10. 汉诺塔算法c++源代码(递归与非递归)[转]

     算法介绍: 其实算法非常简单,当盘子的个数为n时,移动的次数应等于2^n - 1(有兴趣的可以自己证明试试看).后来一位美国学者发现一种出人意料的简单方法,只要轮流进行两步操作就可以了.首先把三根柱 ...