http://acm.hdu.edu.cn/showproblem.php?pid=4771

题目大意:

给你一幅图(N*M)“@”是起点,"#"是墙,“.”是路,然后图上有K个珠宝,

问是否能全部取走珠宝,若能则输出最小步数,否则-1。

思路,可以bfs处理珠宝与珠宝,珠宝与起点的距离同时还可以判断是否可达,

最后因为K<=4,所以枚举路径输出最小ans

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <queue>
using namespace std;
#define N 102
#define inf 0x3f3f3f3f int n,m,sx,sy,k;
char pic[][];
int vis[][];
int dis[][],d_cnt; //d_cnt最后有几个点(包括起点)
struct COORD{
int x,y;
}coord[];
int dir[][]={{,},{,},{-,},{,-}}; int bfs(int &x,int &y){
memset(vis,,sizeof(vis));
queue<int>q;
q.push(coord[x].x);q.push(coord[x].y);
int x1,y1,xx,yy,i;
while(!q.empty()){
x1=q.front(); q.pop();
y1=q.front(); q.pop();
if(x1==coord[y].x&&y1==coord[y].y) return vis[x1][y1];
for(i=; i<; ++i){
xx=x1+dir[i][];
yy=y1+dir[i][];
if(xx>&&xx<=n&&yy>&&yy<=m&&pic[xx][yy]!='#'&&!vis[xx][yy]){
vis[xx][yy]=vis[x1][y1]+;
q.push(xx); q.push(yy);
}
}
}
return ;
} int main(){
int i,j,x,y;
while(scanf("%d%d",&n,&m)!=EOF&&(n||m)){
for(i=; i<=n; ++i)
for(j=; j<=m; ++j){
scanf(" %c",&pic[i][j]);
if(pic[i][j]=='@') sx=i,sy=j;
}
scanf("%d",&k);
d_cnt=;
coord[].x=sx;
coord[].y=sy;
for(i=; i<k; ++i){
scanf("%d%d",&x,&y);
if(x!=sx||y!=sy){ //判断起点上是否放有珠宝
pic[x][y]='*';
coord[d_cnt].x=x;
coord[d_cnt++].y=y;
}
}
int flag=; //求距离顺便判断是否可到达
for(i=; i<d_cnt&&flag; ++i)
for(j=i+; j<d_cnt&&flag; ++j){
flag=bfs(i,j);
dis[i][j]=dis[j][i]=flag;
}
if(!flag) puts("-1");
else{
int p[],ans=inf;
for(i=; i<d_cnt; ++i) p[i]=i;
do{
int sum=;
for(i=; i<d_cnt-; ++i)
sum+=dis[p[i]][p[i+]];
ans=min(ans,sum);
}while(next_permutation(p,p+d_cnt)&&!p[]); //全排列枚举
printf("%d\n",ans);
}
}
return ;
}

然后还有一个问题希望神牛们能解决:要是K加大到50怎么办?

HDU4771(2013 Asia Hangzhou Regional Contest )的更多相关文章

  1. 2013 Asia Hangzhou Regional Contest

    Lights Against Dudely http://acm.hdu.edu.cn/showproblem.php?pid=4770 15个位置,所以可以暴力枚举那些放,对于放的再暴力枚举哪个转, ...

  2. 2013 Asia Hangzhou Regional Contest hdu4780 Candy Factory

    参考:https://blog.csdn.net/sd_invol/article/details/15813671 要点 每个任务的结束时间是固定的,不受任何因素影响 机器只在最一开始有用,在那之后 ...

  3. HDU 3685 Rotational Painting(多边形质心+凸包)(2010 Asia Hangzhou Regional Contest)

    Problem Description Josh Lyman is a gifted painter. One of his great works is a glass painting. He c ...

  4. HDU 3686 Traffic Real Time Query System(双连通分量缩点+LCA)(2010 Asia Hangzhou Regional Contest)

    Problem Description City C is really a nightmare of all drivers for its traffic jams. To solve the t ...

  5. 2012 Asia Hangzhou Regional Contest

    Friend Chains http://acm.hdu.edu.cn/showproblem.php?pid=4460 图的最远两点距离,任意选个点bfs,如果有不能到的点直接-1.然后对于所有距离 ...

  6. 2013 Asia Chengdu Regional Contest

    hdu 4786 Fibonacci Tree http://acm.hdu.edu.cn/showproblem.php?pid=4786 copyright@ts 算法源于ts,用最小生成树可以求 ...

  7. HDU 3689 Infinite monkey theorem(DP+trie+自动机)(2010 Asia Hangzhou Regional Contest)

    Description Could you imaging a monkey writing computer programs? Surely monkeys are smart among ani ...

  8. 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...

  9. zoj 3659 Conquer a New Region The 2012 ACM-ICPC Asia Changchun Regional Contest

    Conquer a New Region Time Limit: 5 Seconds      Memory Limit: 32768 KB The wheel of the history roll ...

随机推荐

  1. 对Socket CAN的理解(5)——【Socket CAN控制器的初始化过程】

    转载请注明出处:http://blog.csdn.net/Righthek 谢谢! 对于一般的CAN模块,进行初始化时,最关键的是下面两步: 1.  配置CAN的位时序: 2.  配置CAN的消息报文 ...

  2. Python学习笔记(三)多线程的使用

    这节记录学习多线程的心得.   Python提供了thread模块,不过该模块的缺点很多,例如无法方便的等待线程结束,所以我们使用更加高级的threading模块.   threading模块的使用一 ...

  3. 機器學習基石(Machine Learning Foundations) 机器学习基石 作业四 Q13-20 MATLAB实现

    大家好,我是Mac Jiang,今天和大家分享Coursera-NTU-機器學習基石(Machine Learning Foundations)-作业四 Q13-20的MATLAB实现. 曾经的代码都 ...

  4. 2D游戏平滑的迷雾战争效果

    近期刚好有做2D游戏的点光源效果,然后就扩展一下.研究了一下战争迷雾的效果.主要是想实现相似魔兽争霸那种人物走动,然后黑色的战争迷雾随着人物的移动渐渐打开的效果.使用具有渐变透明图片作为光源来使得战争 ...

  5. 《memcached全面剖析》

    第1章 memcached的基础 1.1 memcached是什么? memcached是高性能的分布式内存缓存服务器. 一般的做法是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用 ...

  6. ibatis常用的集中判断语句

    http://blog.csdn.net/liaomin416100569/article/details/5344483

  7. 牛散NO.2:MACD西施说风情,柳下惠高位勿迷情

    创业板日线“高位夺命勾魂枪” 话说在创业板的波段调整中,MACD的勾魂枪同样让多头“魂断蓝桥”.圈内图形又好比西施姑娘回眸一笑,吴王夫差便注定命赴黄泉了.范蠡的精心设计让西施 布了一个风情万种的局,被 ...

  8. 字符串算法之 AC自己主动机

    近期一直在学习字符串之类的算法,感觉BF算法,尽管非常easy理解,可是easy超时,全部就想学习其它的一些字符串算法来提高一下,近期学习了一下AC自己主动机.尽管感觉有所收获,可是还是有些朦胧的感觉 ...

  9. atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException  v2 q31

    atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerExceptionv2 q31 1. #--现象 java.lang. ...

  10. 606. Construct String from Binary Tree 【easy】

    606. Construct String from Binary Tree [easy] You need to construct a string consists of parenthesis ...