题目如题。题解如题。

因为目标点最多仅仅有4个,先bfs出俩俩最短路(包含起点)。再dfs最短路。)0s1A;(当年弱跪杭州之题,现看如此简单)

#include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
struct point
{
int x,y;
int cnt;
};
char a[105][105];
vector<point>po;
int n,m;int k;
int mindis[10][10];
int vis[105][105];
int f[4][2]={0,1,0,-1,1,0,-1,0};
int bfs(int s,int t)
{
memset(vis,0,sizeof(vis));
queue<point>q;
po[s].cnt=0;
po[t].cnt=-1;
q.push(po[s]);
vis[po[s].x][po[s].y]=1;
while(!q.empty())
{
point cur=q.front();
q.pop();
point next;
for(int i=0;i<4;i++)
{
next.x=cur.x+f[i][0];
next.y=cur.y+f[i][1];
if(next.x>=0&&next.x<n&&next.y>=0&&next.y<m&&vis[next.x][next.y]==0&&a[next.x][next.y]!='#')
{
next.cnt=cur.cnt+1;
if(next.x==po[t].x&&next.y==po[t].y)
{
return next.cnt;
}
q.push(next);
vis[next.x][next.y]=1;
}
}
}
return -1;
}
int mins=100000000;
int vis2[10];
void dfs(int u,int lev,int sumdis)
{
if(sumdis>=mins)return ;
if(lev==k)
{
if(sumdis<mins)
{
mins=sumdis;return ;
}
}
for(int i=1;i<=k;i++)
{
if(!vis2[i])
{
vis2[i]=1;
dfs(i,lev+1,sumdis+mindis[u][i]);
vis2[i]=0;
}
}
}
int main()
{
while(~scanf("%d%d",&n,&m)&&(n||m))
{
memset(mindis,0,sizeof(mindis));
mins=100000000;
po.clear();
for(int i=0;i<n;i++)
{
getchar();
for(int j=0;j<m;j++)
{
scanf("%c",&a[i][j]);
if(a[i][j]=='@')
{
point txy;txy.x=i;txy.y=j;
po.push_back(txy);
}
}
}
scanf("%d",&k); int aa,bb;
for(int i=0;i<k;i++)
{
scanf("%d%d",&aa,&bb);
point txy;txy.x=aa-1;txy.y=bb-1;
po.push_back(txy);
}
int mark=1;
for(int i=0;i<k+1;i++)
for(int j=i+1;j<k+1;j++)
{
mindis[j][i]=mindis[i][j]=bfs(i,j);
if(mindis[i][j]==-1)
{
mark=0;break;
}
}
if(mark==0)
{
printf("-1\n");continue;
}
memset(vis2,0,sizeof(vis2));
dfs(0,0,0);
printf("%d\n",mins);
}
}

hdu 4771 求一点遍历全部给定点的最短路(bfs+dfs)的更多相关文章

  1. hdu 4771 Stealing Harry Potter&#39;s Precious(bfs)

    题目链接:hdu 4771 Stealing Harry Potter's Precious 题目大意:在一个N*M的银行里,贼的位置在'@',如今给出n个宝物的位置.如今贼要将全部的宝物拿到手.问最 ...

  2. hdu 1595 find the longest of the shortest【最短路枚举删边求删除每条边后的最短路,并从这些最短路中找出最长的那条】

    find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  3. PAT-2019年冬季考试-甲级 7-4 Cartesian Tree (30分)(最小堆的中序遍历求层序遍历,递归建树bfs层序)

    7-4 Cartesian Tree (30分)   A Cartesian tree is a binary tree constructed from a sequence of distinct ...

  4. HDU 4771 Stealing Harry Potter's Precious dfs+bfs

    Stealing Harry Potter's Precious Problem Description Harry Potter has some precious. For example, hi ...

  5. 算法导论—无向图的遍历(BFS+DFS,MATLAB)

    华电北风吹 天津大学认知计算与应用重点实验室 最后改动日期:2015/8/22 无向图的存储方式有邻接矩阵,邻接链表,稀疏矩阵等. 无向图主要包括双方面内容,图的遍历和寻找联通分量. 一.无向图的遍历 ...

  6. hdu 1710 二叉树的遍历

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1710 大意:给出一个二叉树的前序和中序,求其后序遍历 ps:1.在写链表时,需要写明typedef str ...

  7. 【HDU 4771 Stealing Harry Potter's Precious】BFS+状压

    2013杭州区域赛现场赛二水... 类似“胜利大逃亡”的搜索问题,有若干个宝藏分布在不同位置,问从起点遍历过所有k个宝藏的最短时间. 思路就是,从起点出发,搜索到最近的一个宝藏,然后以这个位置为起点, ...

  8. HDU 2023 求平均成绩

    Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU ...

  9. hdu 4771 Stealing Harry Potter's Precious (2013亚洲区杭州现场赛)(搜索 bfs + dfs) 带权值的路径

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4771 题目意思:'@'  表示的是起点,'#' 表示的是障碍物不能通过,'.'  表示的是路能通过的: ...

随机推荐

  1. 自适应增强(Adaptive Boosting)

    简介 AdaBoost,是英文”Adaptive Boosting“(自适应增强)的缩写,是一种迭代提升算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成 ...

  2. 论文阅读《End-to-End Learning of Geometry and Context for Deep Stereo Regression》

    端到端学习几何和背景的深度立体回归 摘要     本文提出一种新型的深度学习网络,用于从一对矫正过的立体图像回归得到其对应的视差图.我们利用问题(对象)的几何知识,形成一个使用深度特征表示的代价量(c ...

  3. 异构关系数据库(Sqlserver与Oracle)之间的数据类型转换参考

    一.Oracle到SqlServer的数据类型的转变 编号 Oracle ToSqlServer SqlServer 1 BINARY_DOUBLE VARCHAR(100) real 2 BINAR ...

  4. datalist标签 输入框候选

    H5的datalist标签,可以给input输入框提供下拉选择列表,或输入提示功能. 写如下的datalist标签 <datalist id="car"> <op ...

  5. 【BZOJ 1221】 [HNOI2001] 软件开发

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] /* 设一个超级源点S和超级汇点T S和2*i-1各连一条容量为ni的边. 花费为0 表示每天都会产生ni条要洗的毛巾 S和2*i各 ...

  6. leetcode笔记:Find Median from Data Stream

    一. 题目描写叙述 Median is the middle value in an ordered integer list. If the size of the list is even, th ...

  7. POJ 2906 数学期望

    开始时直接设了一个状态,dp[i][j]为发现i种bug,j个系统有bug的期望天数.但很错误,没能转移下去.... 看了题解,设状态dp[i][j]为已发现i种bug,j个系统有bug,到完成目标状 ...

  8. Android application framework 分析[in process]

    application activity application service application UI system application sdk tool JVM 1 activity t ...

  9. android 联系人中,在超大字体下,加入至联系人界面(ConfirmAddDetailActivity)上有字体显示不全的问题

    联系人(Contacts)中,在超大字体下.加入至联系人界面 (ConfirmAddDetailActivity)上有字母显示不全,如"j"等 这是android布局比較紧凑引起的 ...

  10. iOS-UITextField 全面解析

    iOS中UITextField 使用全面解析 建议收藏,用到的时候来这里一查就都明白了 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField ...