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. [Node.js] Show More Lines in a Node.js Error Stack Trace

    Sometimes you are one or two lines short from finding the cause of the error in the stack trace but ...

  2. DirectShow控制台输出和保存视频设备名称

    #include "windows.h" #include "TCHAR.h" #include <dshow.h> #include <ve ...

  3. C# NPOI操作Excel(下)

    根据自己项目需求编写,仅供参考 个人建议:使用Excel模板进行导出操作.尽量避免自己生成Excel(既繁琐又容易出BUG).大多情况下导出Excel都是固定格式,使用模板导出会方便很多. publi ...

  4. GBDT,随机森林

    author:yangjing ## time:2018-10-22 Gradient boosting decision tree 1.main diea The main idea behind ...

  5. Apache Rewrite 规则详解

    在开篇之前: 我想说这篇文章其实是我刚刚接触Rewrite的时候学习的文档,应属转载,但是在这里我不想写明原地址,原因是文章中大多数给出的配置命令经实验都是错误的.需要原文的可以在谷歌上搜索一下&qu ...

  6. MVC Controller return 格式之JsonResult、ContentResult、RedirectResult……

      //语法 public class JsonResult : ActionResult public class ContentResult : ActionResult public class ...

  7. Atitit. . 软件命名空间与类名命名单词的统计程序设计v2

    Atitit. . 软件命名空间与类名命名单词的统计程序设计v2 1. 要实现的目标1 1.1. Camel字符串模式的分词处理1 1.2. 多个大写的处理1 1.3. 数字与字幕的分离1 1.4.  ...

  8. gtx官方example仿真

    一.应用ISE中仿真器ISim 进行仿真: 1.用CORE Generator 产生gtx IP核(重新改IP配置只需在CORE Generator中打开coregen.cgp文件进入点击IP修改参数 ...

  9. __attribute__系列之介绍篇

    1.什么是__attribute__? __attribute__机制是GNU C的一大特色,它可以设置函数属性.变量属性和类型属性等.可以通过它们向编译器提供更多数据,帮助编译器执行优化等. 2._ ...

  10. abp使用风格定义

    一个开发人员的开发模式下面.用这个有太多代码要写了.所以需要限制与规范自己: 基于abp新系统的开发过程1>*.Core 增加文件夹eg:Questions1.1>增加实体文件eg:QAQ ...