HDU4771(2013 Asia Hangzhou Regional Contest )
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 )的更多相关文章
- 2013 Asia Hangzhou Regional Contest
Lights Against Dudely http://acm.hdu.edu.cn/showproblem.php?pid=4770 15个位置,所以可以暴力枚举那些放,对于放的再暴力枚举哪个转, ...
- 2013 Asia Hangzhou Regional Contest hdu4780 Candy Factory
参考:https://blog.csdn.net/sd_invol/article/details/15813671 要点 每个任务的结束时间是固定的,不受任何因素影响 机器只在最一开始有用,在那之后 ...
- 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 ...
- 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 ...
- 2012 Asia Hangzhou Regional Contest
Friend Chains http://acm.hdu.edu.cn/showproblem.php?pid=4460 图的最远两点距离,任意选个点bfs,如果有不能到的点直接-1.然后对于所有距离 ...
- 2013 Asia Chengdu Regional Contest
hdu 4786 Fibonacci Tree http://acm.hdu.edu.cn/showproblem.php?pid=4786 copyright@ts 算法源于ts,用最小生成树可以求 ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- 对Socket CAN的理解(5)——【Socket CAN控制器的初始化过程】
转载请注明出处:http://blog.csdn.net/Righthek 谢谢! 对于一般的CAN模块,进行初始化时,最关键的是下面两步: 1. 配置CAN的位时序: 2. 配置CAN的消息报文 ...
- Python学习笔记(三)多线程的使用
这节记录学习多线程的心得. Python提供了thread模块,不过该模块的缺点很多,例如无法方便的等待线程结束,所以我们使用更加高级的threading模块. threading模块的使用一 ...
- 機器學習基石(Machine Learning Foundations) 机器学习基石 作业四 Q13-20 MATLAB实现
大家好,我是Mac Jiang,今天和大家分享Coursera-NTU-機器學習基石(Machine Learning Foundations)-作业四 Q13-20的MATLAB实现. 曾经的代码都 ...
- 2D游戏平滑的迷雾战争效果
近期刚好有做2D游戏的点光源效果,然后就扩展一下.研究了一下战争迷雾的效果.主要是想实现相似魔兽争霸那种人物走动,然后黑色的战争迷雾随着人物的移动渐渐打开的效果.使用具有渐变透明图片作为光源来使得战争 ...
- 《memcached全面剖析》
第1章 memcached的基础 1.1 memcached是什么? memcached是高性能的分布式内存缓存服务器. 一般的做法是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用 ...
- ibatis常用的集中判断语句
http://blog.csdn.net/liaomin416100569/article/details/5344483
- 牛散NO.2:MACD西施说风情,柳下惠高位勿迷情
创业板日线“高位夺命勾魂枪” 话说在创业板的波段调整中,MACD的勾魂枪同样让多头“魂断蓝桥”.圈内图形又好比西施姑娘回眸一笑,吴王夫差便注定命赴黄泉了.范蠡的精心设计让西施 布了一个风情万种的局,被 ...
- 字符串算法之 AC自己主动机
近期一直在学习字符串之类的算法,感觉BF算法,尽管非常easy理解,可是easy超时,全部就想学习其它的一些字符串算法来提高一下,近期学习了一下AC自己主动机.尽管感觉有所收获,可是还是有些朦胧的感觉 ...
- atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException v2 q31
atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerExceptionv2 q31 1. #--现象 java.lang. ...
- 606. Construct String from Binary Tree 【easy】
606. Construct String from Binary Tree [easy] You need to construct a string consists of parenthesis ...