题目背景

数据有更改

题目描述

某乡有nn个村庄(1<n \le 201<n≤20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)s(0<s<1000)是已知的,且AA村到BB村与BB村到AA村的路大多不同。为了提高效率,他从商店出发到每个村庄一次,然后返回商店所在的村,假设商店所在的村庄为11,他不知道选择什么样的路线才能使所走的路程最短。请你帮他选择一条最短的路。

输入输出格式

输入格式:

村庄数nn和各村之间的路程(均是整数)。

输出格式:

最短的路程。

输入输出样例

输入样例#1: 复制

3
0 2 1
1 0 2
2 1 0

输出样例#1: 复制

3

------------------------------------------------------------
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct pd
{int ha,e;
}lxy[25][25];
//存图,ha表示各点时间消耗,e表示要去的点,因为排序动列,不动行,所以记下列,就是要去的点
int hrb[25],n,i,j,k,minn=1e9,maxn=1001,emm[25];//新增一个emm数组解决排序动列的问题
int cmp(pd a,pd b)
{return a.ha<b.ha;
}//排序函数
int ss(int x,int y,int z) //y记录走过的村庄数
{if(z>=minn)return 0;//用sort优化,提前找出最小值,剪枝if(z+n-y+1+maxn>=minn)//两地之间距离最短是1 return 0;//预见性剪枝,maxn表示x点到1的最小距离,然后剩余点取最小值1,极值判定if(y==n){minn=min(minn,z+emm[x]);return 0;}if(y<n)for(int i=2;i<=n;i++)if(hrb[lxy[x][i].e]==0)//判断是否走过,为啥是lxy[x][i].e,请见上面解释
    {   if(z+lxy[x][i].ha+n-y+maxn>minn)return 0;//预见性剪枝,极值判定,用这两个可以90分hrb[lxy[x][i].e]=1;ss(lxy[x][i].e,y+1,z+lxy[x][i].ha);hrb[lxy[x][i].e]=0;}return 0;
}
int main()
{scanf("%d",&n);for(i=1;i<=n;i++){    for(k=1;k<=n;k++){scanf("%d",&lxy[i][k].ha);lxy[i][k].e=k;//记录列数if(i!=1&&k==1)maxn=min(maxn,lxy[i][1].ha),emm[i]=lxy[i][1].ha;//求x到1的最小时间花费,用于预见性剪枝,和存x到1的花费用于搜索结算,解决排序造成的列乱序的情况
        }sort(lxy[i]+1,lxy[i]+n+1,cmp);//STL大法好,二维数组的排序要用for,sort可以优化找出的答案minn,减少无用功
    }hrb[1]=1;//跑过了就要踩,不然会跑回去,想想80分代码为啥不用赋值为1?因为80分列没乱序ss(1,1,0);printf("%d",minn);return 0;
}

这道题吧

标签上是搜索

然而

大部分都是状压dp

但还好

还有写搜索的

(我坚持写搜索的原因就是我搜索不太好)

虽然草草的写了一个

还过了样例

但全wa了

庆幸了一小下

没有tle mle什么的

但当我不太会改的时候

才知道我的搜索是totally错的

向现实低头的我

有卑微看题解了

(题解都在代码中)

转载于:https://www.cnblogs.com/darlingroot/p/10346901.html

P1171 售货员的难题--搜索(剪枝)相关推荐

  1. 洛谷P1171 售货员的难题 题解

    洛谷P1171 售货员的难题 题解 题目链接:P1171 售货员的难题 题意:TSP问题. 某乡有nnn个村庄(1<n≤201<n \le 201<n≤20),有一个售货员,他要到各 ...

  2. P1171 售货员的难题

    P1171 售货员的难题 题目描述 某乡有nn个村庄(1<n \le 201<n≤20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)s(0< ...

  3. 2596 售货员的难题

    2596 售货员的难题  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 钻石 Diamond 题解 题目描述 Description 某乡有n个村庄(1<n<=15) ...

  4. 模拟退火算法——解决售货员的难题

    模拟退火算法--解决售货员的难题 分类: 解题报告 其他2010-11-22 23:20 1000人阅读 评论(2) 收藏 举报 算法优化outputgraphinputc Simulation An ...

  5. poj 1948(搜索+剪枝)

    解题思路:这道题看到数据量,想到应该搜索+剪枝应该可以过..可是别人的A了,我的却超时了... 我用了一个mark[a][b],表示前两条边长度分别为a和b时,是否已经处理过,如果是的话就直接跳出.. ...

  6. LeetCode 47. 全排列 II(回溯+搜索剪枝)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例:输入: [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1] ] ...

  7. 极大极小搜索 α-β剪枝的实现

    极大极小搜索 α-β剪枝的实现 //---------搜索当前搜索状态极大值--------------------------------// //alpha 祖先节点得到的当前最小最大值,用于al ...

  8. 深搜、广搜、搜索剪枝

    搜索与回溯讲解 文章目录 深搜 方向向量: DFS代码: 题目讲解: 八皇后问题 字符序列 自然数的拆分 广搜 BFS代码: 题目讲解: 瓷砖 关系网络 bfs与dfs的用途与区别 搜索剪枝 可行性剪 ...

  9. USACO 6.5.3 Betsy's Tour 搜索剪枝

    http://train.usaco.org/usacoprob2?a=BI4LEPNXcEa&S=betsy 题目大意:一个N*N的方阵(N<=7),求从左上角出发到左下角结束经过每个 ...

最新文章

  1. H5 画布解决跨域问题,画布保存为图片显示在页面上
  2. Linux-DNS服务器的配置与管理(上)
  3. Windows Server 2016-命令行Ntdsutil迁移FSMO角色
  4. 如何用windbg查看_eprocess结构
  5. Nginx-Nginx配置文件详细说明
  6. [译文]Domain Driven Design Reference(三)—— 模型驱动设计的构建模块
  7. java集合—— 链表(java中的所有链表都是双向链表)
  8. HTML期末作业-旅游网页作业Html+css+Bootstarp
  9. 把冰卖给爱斯基摩人_爱斯基摩人使用冰屋应用程序来节省资源
  10. Alpha(9/10)
  11. C语言的静态数组初始化
  12. 数据:本周DOT将解锁476.59万枚 上周共质押171.2万枚
  13. 足球机器人第一次作业:编写程序解析球员所看到和听到的信息。
  14. office图标显示异常和新建时图标没有显示等问题解决
  15. 走向.NET架构设计---第二章:设计 测试 代码
  16. 天翎知识管理系统为研究所文档管理组织创新赋能
  17. Mac终端ssh连接Linux服务器
  18. SEO入门知识2:不同角度看seo
  19. 在win xp上使用pyqt5
  20. python为什么运行不了_python为什么安装了运行不了?

热门文章

  1. 数据产品设计专题(4)- 程序化交易业务架构模型
  2. VMware下Windows2003R2虚拟机磁盘扩容方法
  3. 在Linux系统下查看ora错误
  4. java软件工程师成长过程的学习
  5. Delphi7 (第一天:类的编写)续
  6. XP农历补丁【绿色版】
  7. English trip -- VC(情景课)1 D
  8. Dynamics CRM2013/2015 检索实体属性的两种方式
  9. VC2010不能将参数从“CString”转换为“const char *”
  10. 一月17日新生冬季练习赛解题报告B.函数问题