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. HTML5 Canvas 笛卡尔坐标系转换尝试

    <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type&quo ...

  2. 基于php的银行卡实名认证接口调用代码实例

    银行卡二元素检测,检测输入的姓名.银行卡号是否一致. 银行卡实名认证接口:https://www.juhe.cn/docs/api/id/188 <?php // +-------------- ...

  3. Linux——解决RedHat6/CentOS6系统中“弹出界面eth0:设备似乎不存在”的问题

    刚刚在自己的CentOS6系统中执行service network restart时,竟然提示: 弹出界面 eth0: 设备 似乎不存在, 初始化操作将被延迟.   [失败] 这事可真神奇.于是手动编 ...

  4. LoadRunner测试Google Suggest

    Google的搜索框是典型的AJAX应用,用户在输入关键字的同时,前端页面通过xmlhttp与后台服务器动态交互,根据用户输入的关键字查找匹配的内容,向用户提示建议的搜索项,也就是所谓的“google ...

  5. null和undefined相等比较

    在==(相等)判断中,null和undefined相等(它们也与自身相等),除此之外不与其他值相等. 示例代码: <!DOCTYPE html> <html lang="z ...

  6. 百度MUX:APP动效之美需内外兼修

    移动互联网时代已经到来.APP已如天空的繁星.数也数不清.随着手机硬件的不断升级,实现炫酷且流畅的动效不再是遥远的梦想.假设你是APP达人,喜欢试用各种APP,你肯定会发现越来越多的APP開始动效化. ...

  7. 【BIEE】16_饼图应用

    在BIEE中,我们可以使用饼图来展示报表数据 饼图在使用中有三元素:①切片 ②饼图 ③度量 那么我们来分别看下这三个元素的功能分别是什么? 我们通过上图可以看出度量中存在2个度量,那么此时的饼图数量是 ...

  8. 【Java】Java_03第一个Java程序

    第一个JAVA程序的编写和运行 1.使用记事本编辑 public class Welcome{ public static void main(String[] agrs){ System.out.p ...

  9. Linux下中断程序导致写文件失败的分析

    案例: 一个普通linux C程序,执行期间会进行多次printf操作,利用bash脚本重定向功能,将stdout重定向到一个另一个文件中去.在运行途中用ctrl+C终止程序,发现定向文件始终为空,即 ...

  10. 【c语言】不用大与小与号,求两数最大值

    // 不用大与小与号,求两数最大值 #include <stdio.h> int max(int a, int b) { int c = a - b; int d = 1 << ...