题意:

给你一个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. 测试edit中数据是否合法

    void XyModal::OnEnKillfocusEdit1() { // TODO: 在此添加控件通知处理程序代码 CString cText; GetDlgItemText(IDC_EDIT1 ...

  2. centos 设置 ip地址

    linux设置ip,主要是修改/etc/sysconfig/network-scripts/ifcfg-** 里面的网卡配置文件,然后命令 service network restart 生效 自动获 ...

  3. 面试bb

    1.面试者进行自我介绍 2.学校/学历/大学生活及课程的心得总结(人品,性格评估) 3.技能介绍(是否对应聘工作有帮助,评估学习能力):编程/操作系统/测试工具/测试方法/脚本 4.离职原因/项目经验 ...

  4. 64.root object的理解

    一.root object的理解     就是某个type对应的mapping json,包括properties,metadata(_id,_source,_type),settings(analy ...

  5. 远程连接Ubuntu的桌面

    参考:http://www.linuxidc.com/Linux/2016-06/132442.htm http://teliute.org/linux/TeUbt/lesson52/lesson52 ...

  6. linux学习7-数据流重定向

    数据流重定向 实验介绍 你可能对重定向这个概念感到些许陌生,但你应该在前面的课程中多次见过>或>>操作了,并知道他们分别是将标准输出导向一个文件或追加到一个文件中.这其实就是重定向, ...

  7. bzoj 5355 kdtree 树链剖分

    https://www.lydsy.com/JudgeOnline/problem.php?id=5355 想在b站搜query on a tree系列不小心看到了这题 扑鼻而来的浓浓的OI风格的题面 ...

  8. play snake on linux

    在写完超Low的windows上的贪吃蛇后 被人吐槽了几个方面: 1.界面真的Low,开始,结束,游戏中,都太简陋了... 2.每次都清屏在输出字符矩阵的解决方案...太晃眼了 3.一个BUG,为了解 ...

  9. spring mvc之applicationContext

    1.ApplicationContext是在package org.springframework.context下,是spring的,spring context包下的. applicationCo ...

  10. Maven: java.lang.ClassNotFoundException: org.eclipse.aether.spi.connector.Transfer$State

    在mac中使用maven compile时发生以下错误: Maven: java.lang.ClassNotFoundException: org.eclipse.aether.spi.connect ...