XTU 1186 Tourist 2
来源:互联网 发布:淘宝虎扑识货推荐店铺 编辑:程序博客网 时间:2024/06/11 12:39
Tourist 2
[ Submit Code ] [ Top 20 Runs ] Acceteped : 37 Submit : 120 Time Limit : 1000 MS Memory Limit : 65536 KBDescription
题目描述
Eric喜欢旅行,今年暑假终于可以有几天时间出去玩了。他计划在去N个不同的城市,而且不想重复去相同的城市,最后需要回到出发的城市,他想知道怎么走可以让差旅费用降到最低?我们把城市编号为0~N,Eric总从0号城市出发。
输入
第一行是一个整数K,表示样例的个数。每个样例的第一行为一个整数N(1≤N≤9),表示想去N个城市。以后的N行,每行N个整数Xij,第i行第j列个整数表示从城市i到城市j所需要的旅费,单次费用不超过1000。i = j 时,Xij = 0。
输出
每行输出一个样例的结果,包括两行,第一行是差旅的总费用,第二行是3个城市的编号序列,每个城市编号之间用一个空格隔开,表示旅行的路线,如果存在多条线路都是最少花费,请按字典序输出这些线路,每个线路一行,最多输出10条线路。
样例输入
130 1 1 12 0 2 23 3 0 34 4 4 0
样例输出
101 2 31 3 22 1 32 3 13 1 23 2 1
Sample Input
Sample Output
Source
[ Submit Code ] [ Top 20 Runs ]
思路:是XTU1184的加强版。很容易想到,因为每个城市只能去一次,且数据最大为9,因此,也可以枚举所有解。这样,其实就可以转化为类似N皇后的问题了。故采用回溯法来解决,期间有一个优化过程,即在继续寻找之前,先判断是否比当前最优解更优,如果没有当前最优解优,就没必要继续找下去了。详见代码。
AC代码如下:
#include <bits/stdc++.h>using namespace std;const int maxn = 10;int w[maxn][maxn], ans[maxn][maxn];bool vis[maxn];int way[maxn];int n, mind, cnt;void dfs(int d, int k, int num){ if (num == n){ int t = d+w[k][0]; if (t > mind) return ; if (t==mind && cnt<9){ ++cnt; for (int i=1; i<=n; ++i) ans[cnt][i] = way[i]; } else if (t < mind){ cnt = 0; mind = t; for (int i=1; i<=n; ++i) ans[cnt][i] = way[i]; } return ; } for (int i=1; i<=n; ++i) if (!vis[i] && d+w[k][i]<mind){ vis[i] = true; way[num+1] = i; dfs(d+w[k][i], i, num+1); vis[i] = false; }}int main(){ ios::sync_with_stdio(false); cin.tie(0); int T; scanf("%d", &T); while (T--){ scanf("%d", &n); for (int i=0; i<=n; ++i) for (int j=0; j<=n; ++j) scanf("%d", &w[i][j]); mind = INT_MAX; dfs(0, 0, 0); printf("%d\n", mind); for (int i=0; i<=cnt; ++i){ for (int j=1; j<n; ++j) printf("%d ", ans[i][j]); printf("%d\n", ans[i][n]); } } return 0;}
1 0
- XTU 1186 Tourist 2
- XTU 1184 Tourist 1
- XTU C语言程序设计实践作业2
- Codeforces Round #198 (Div. 2) C. Tourist Problem - 找规律
- Codeforces Round #198 (Div. 2) C. Tourist Problem
- Codeforces Round #198 (Div. 2) C. Tourist Problem
- #300 (div.1 2) C. Tourist's Notes
- CF76F. Tourist
- Tourist Attractions
- Tourist Attractions
- 2016XTU算法专题个人赛2 题解
- goodbye, XTU
- XTU 1140
- XTU OJ
- XTU OJ
- XTU 1185
- xtu 4
- xtu 8
- Android 运行崩溃找不到so包解决方案
- struts2复习1
- 数据处理中白化Whitening的作用图解分析
- 创建节点元素
- MyEclipse快捷键大全
- XTU 1186 Tourist 2
- leetcode 58 Length of Last Word C++
- 数据库排序问题
- SDCard权限设置(结合上一篇)
- Python之中位数
- 矩阵乘法
- centos7学习git笔记
- 动态插入节点方法(一)
- rxJava Schedulers Use Cases