题意:

给你一个n*m的图。你从’o’点出发,只能走路(图中的’.’)不能穿墙(图中的’x’),去捡垃圾(图中的’ * ‘)问最少走多少步能捡完所有垃圾,如有垃圾捡不了,输出-1.

思路:

有两个思路

  1. 我会的
  2. 我不会的

    (嗯 学一下小杰)

我会的—->BFS+全排列(next_permutation可水之)

我不会的–>BFS+状压DP

//By: Sirius_Ren
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int p[11][2],tot,sx,sy,xx[]={1,-1,0,0},yy[]={0,0,1,-1},b[25][25],n,m,vis[25][25],f[25],minn;
char a[25][25];
queue<pair<int,int> > q;
int main()
{
st:while(scanf("%d%d",&m,&n)&&(m||n)){
for(int i=1;i<=11;i++)f[i]=i;minn=0x3fffffff,tot=0;
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++)
for(int j=0;j<=m;j++){
scanf("%c",&a[i][j]);
if(a[i][j]=='*')p[++tot][0]=i,p[tot][1]=j;
else if(a[i][j]=='o')sx=i,sy=j;
}
p[++tot][0]=sx,p[tot][1]=sy;
for(int ii=1;ii<=tot;ii++){
memset(vis,-1,sizeof(vis));
q.push(make_pair(p[ii][0],p[ii][1]));
vis[p[ii][0]][p[ii][1]]=0;
while(!q.empty()){
pair<int,int> Q=q.front();q.pop();
for(int i=0;i<=3;i++){
char tx=Q.first+xx[i],ty=Q.second+yy[i];
if((a[tx][ty]=='.'||a[tx][ty]=='*'||a[tx][ty]=='o')&&!(~vis[tx][ty]))
vis[tx][ty]=vis[Q.first][Q.second]+1,q.push(make_pair(tx,ty));
}
}
for(int i=1;i<=tot;i++)
if(~vis[p[i][0]][p[i][1]])b[ii][i]=vis[p[i][0]][p[i][1]];
else {printf("-1\n");goto st;}
}
do{
int sum=0;
for(int i=2;i<=tot;i++) sum+=b[f[i-1]][f[i]];
minn=min(minn,sum);
}while(next_permutation(f+1,f+tot));
printf("%d\n",minn);
}
}



竟然1A了(呃如果不算中途回家先交上去一次保存的话)

Code length Rank5 还不错

POJ 2688 Cleaning Robot的更多相关文章

  1. poj 2688 Cleaning Robot bfs+dfs

    题目链接 首先bfs, 求出两两之间的距离, 然后dfs就可以. #include <iostream> #include <cstdio> #include <algo ...

  2. POJ 2376 Cleaning Shifts(轮班打扫)

    POJ 2376 Cleaning Shifts(轮班打扫) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] Farmer ...

  3. poj 2688 状态压缩dp解tsp

    题意: 裸的tsp. 分析: 用bfs求出随意两点之间的距离后能够暴搜也能够用next_permutation水,但效率肯定不如状压dp.dp[s][u]表示从0出发訪问过s集合中的点.眼下在点u走过 ...

  4. HOJ 2226&POJ2688 Cleaning Robot(BFS+TSP(状态压缩DP))

    Cleaning Robot Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4264 Accepted: 1713 Descri ...

  5. Cleaning Robot (bfs+dfs)

    Cleaning Robot (bfs+dfs) Here, we want to solve path planning for a mobile robot cleaning a rectangu ...

  6. Cleaning Robot POJ - 2688

    题目链接:https://vjudge.net/problem/POJ-2688 题意:在一个地面上,有一个扫地机器人,有一些障碍物,有一些脏的地砖,问,机器热能不能清扫所有的地砖, (机器人不能越过 ...

  7. poj 2376 Cleaning Shifts

    http://poj.org/problem?id=2376 Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  8. POJ 2376 Cleaning Shifts 贪心

    Cleaning Shifts 题目连接: http://poj.org/problem?id=2376 Description Farmer John is assigning some of hi ...

  9. 【原创】poj ----- 2376 Cleaning Shifts 解题报告

    题目地址: http://poj.org/problem?id=2376 题目内容: Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K ...

随机推荐

  1. HDU 4027(线段树)

    HDU4027 题意:操作指令为0时,对区间[x,y]之间的数字进行开平方:指令为1的时候,对区间[x,y]之间的数字求和并输出: 思路:线段树处理就OK了,但是64位内的数最多开8次平方就为1了(开 ...

  2. Linux - 用户管理与文件权限

    目录 Linux - 用户管理与文件权限 创建普通用户 切换用户 userdel删除用户 sudo 命令 文件与目录权限 Linux权限的解读 目录权限 查看用户权限的命令 文件权限 修改权限的命令 ...

  3. Python基础-while

    使用while循环实现输出2-3+4-5+6.....+100的和. i = 2 sum=0 while i<=100: if i % 2 == 0: sum += i else: sum -= ...

  4. hdu 5171 GTY's birthday gift

    GTY's birthday gift 问题描述 GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法k次 ...

  5. 【MFC Programming】 Using Dialog To Set A Correlate Menu

    This blog will show how to display a menu we designed in a dialog. 1.Insert a new dialog& a new ...

  6. unigui的session【1】

    目前是1394. 明白session如何使用管理,看demo Session List和SessionTimeout unit Main; interface uses Windows, Messag ...

  7. Mysql学习总结(40)——MySql之Select用法汇总

    一.条件筛选 1.数字筛选:sql = "Select * from [sheet1$] Where 销售单价 > 100" 2.字符条件:sql = "Selec ...

  8. SCU Censor

    Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text p . Her j ...

  9. springCloud学习-服务消费者(Feign)

    1.简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单.使用Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解.Fei ...

  10. 【ACM】hdu_2004_成绩转换_201307261516

    成绩转换Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...