XTU 1186 Tourist 2

2023-12-15 17:59
文章标签 xtu tourist 1186

本文主要是介绍XTU 1186 Tourist 2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Tourist 2

[ Submit Code ] [ Top 20 Runs ]
Acceteped : 37   Submit : 120
Time Limit : 1000 MS Memory Limit : 65536 KB
 

Description

题目描述

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条线路。

样例输入
1
3
0 1 1 1
2 0 2 2
3 3 0 3
4 4 4 0
样例输出
10
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 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;
}

这篇关于XTU 1186 Tourist 2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/497347

相关文章

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

XTU 1233 n个硬币连续m个正面个数(dp)

题面: Coins Problem Description: Duoxida buys a bottle of MaiDong from a vending machine and the machine give her n coins back. She places them in a line randomly showing head face or tail face o

UVA10099 - The Tourist Guide(floyd + 最小值的最大化)

UVA10099 - The Tourist Guide(floyd + 最小值的最大化)  UVA10099 - The Tourist Guide 题目大意:  给一无向图,图上的点代表城市,边代表路,每条边上的权值代表的是这条路上的巴士的最大乘客数,作为导游,给定起点和终点,和负责的游客,问需要的最少的趟数可以将这个游客送到终点。 解题思路:  路径上最小值的最大化。减少趟数,

XTU 1185 Bob's Problem

Bob's Problem Accepted : 53 Submit : 356Time Limit : 1000 MS Memory Limit : 65536 KB 题目描述 Bob今天碰到一个问题,他想知道x3+y3 = c 是否存在正整数解? 输入 第一行是一个整数K(K≤20000),表示样例的个数。 以后每行一个整数c(2≤c≤109) 输出 每行输出一个样例的结果,

[数据集][目标检测]肺结节检测数据集VOC+YOLO格式1186张1类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1186 标注数量(xml文件个数):1186 标注数量(txt文件个数):1186 标注类别数:1 标注类别名称:["nodule"] 每个类别标注的框数: nodule 框数 = 1186 总框数:1186 使用

Codeforces 1186 F. Vus the Cossack and a Graph —— 线段树,贪心

This way 题意: 现在有一张简单图,n个点m条边,让你留下最多 ⌈ n + m 2 ⌉ \lceil{\frac{n+m}{2}}\rceil ⌈2n+m​⌉条边,假设每个点的当前度数为di,每个点的最终度数要大于等于 ⌈ d i 2 ⌉ \lceil{\frac{d_i}{2}}\rceil ⌈2di​​⌉。问你留下来哪些边 题解: 我最近做题目都先考虑线段树是否能做…不知道这

1186: 子序列问题II(前缀和)

1186: 子序列问题II 菜鸟生成记(77) 水题,不过要加一点点的优化;纯暴力O(n^3),前缀和预处理一下,O(n*n) #include<iostream>#include<cstring>using namespace std;int a[11000];int main(){int n,s;while(cin>>n>>s){int len1=20000;memset(a,

xtu oj 1353 Digit String

题目描述 小明获得了一些密码的片段,包含0∼9,A∼F 这些字符,他猜这些是某个进制下的一个整数的数码串。 小明想知道从2到16进制中,哪些进制下,这个数码串的对应的十进制整数值,等于n? 输入 存在不超过1000个样例,每行一个样例。 每行包括两部分,数码串(串长不超过31),整数n(1≤n≤109) 输出 每行输出一个样例的结果。 如果存在多个解,输出最小的那个进制。 如果没有满足的

xtu oj 1233 Cycle Matrix 2.0

题目描述 给定N,输出一个N*N的矩阵,矩阵为N层,每层是一个字符,从A到Z。 比如说N=3,矩阵为 CCCCCCBBBCCBABCCBBBCCCCCC 输入 第一行是一个整数K(K≤50),表示样例数。 每个样例占1行,为一个整数N(1≤N≤26)。 输出 每个样例输出对应的矩阵,行尾没有多余的空格。 样例输入 3123 样例输出 ABBBBABBBB

xtu oj 1150 n!进制 2.0

题目描述 n!进制是指每i位的权值是(i+1)!,每一位的系数为0~i+1。 比如n!进制的21 = 2*2! + 1*1! = 5。给你一个10进制数,求其n!进制的值。 输入 每行一个10进制的整数n,0≤n≤3,628,799。 输出 每行输出一个样例的结果。 样例输入 01101003628799 样例输出 011204020987654321 AC代码