POJ 2688 Cleaning Robot
题意: 
给你一个n*m的图。你从’o’点出发,只能走路(图中的’.’)不能穿墙(图中的’x’),去捡垃圾(图中的’ * ‘)问最少走多少步能捡完所有垃圾,如有垃圾捡不了,输出-1. 
思路: 
有两个思路
- 我会的
- 我不会的 
 (嗯 学一下小杰)
我会的—->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的更多相关文章
- poj 2688 Cleaning Robot bfs+dfs
		题目链接 首先bfs, 求出两两之间的距离, 然后dfs就可以. #include <iostream> #include <cstdio> #include <algo ... 
- POJ 2376 Cleaning Shifts(轮班打扫)
		POJ 2376 Cleaning Shifts(轮班打扫) Time Limit: 1000MS Memory Limit: 65536K [Description] [题目描述] Farmer ... 
- poj 2688 状态压缩dp解tsp
		题意: 裸的tsp. 分析: 用bfs求出随意两点之间的距离后能够暴搜也能够用next_permutation水,但效率肯定不如状压dp.dp[s][u]表示从0出发訪问过s集合中的点.眼下在点u走过 ... 
- HOJ 2226&POJ2688 Cleaning Robot(BFS+TSP(状态压缩DP))
		Cleaning Robot Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4264 Accepted: 1713 Descri ... 
- Cleaning Robot (bfs+dfs)
		Cleaning Robot (bfs+dfs) Here, we want to solve path planning for a mobile robot cleaning a rectangu ... 
- Cleaning Robot POJ - 2688
		题目链接:https://vjudge.net/problem/POJ-2688 题意:在一个地面上,有一个扫地机器人,有一些障碍物,有一些脏的地砖,问,机器热能不能清扫所有的地砖, (机器人不能越过 ... 
- poj 2376 Cleaning Shifts
		http://poj.org/problem?id=2376 Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submi ... 
- POJ 2376 Cleaning Shifts 贪心
		Cleaning Shifts 题目连接: http://poj.org/problem?id=2376 Description Farmer John is assigning some of hi ... 
- 【原创】poj ----- 2376 Cleaning Shifts 解题报告
		题目地址: http://poj.org/problem?id=2376 题目内容: Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K ... 
随机推荐
- 视频cover占满
			/* 关键属性 */ object-fit: fill; //被替换的内容的大小,以填补该元素的内容框:对象的具体对象的大小是元素的使用宽度和高度. object-fit: contain;被替换的内 ... 
- ubuntu14.0开机guest账号禁用方法
			在终端里进入/usr/share/lightdm/lightdm.conf.d/目录 sudo vim 50-unity-greeter.conf 然后在文件里输入: [SeatDefaults] a ... 
- [luogu2591 ZJOI2009] 函数
			传送门 Solution 画图找规律.. Code //By Menteur_Hxy #include <cstdio> #define min(a,b) ((a)>(b)?(b): ... 
- web前端学习总结--CSS
			CSS 什么是CSS? CSS 指层叠样式表(Cascading Style Sheets) 样式定义如何显示HTML元素 样式通常存储在样式表中 如何使用CSS 内联方式 样式定义在单个的HTML元 ... 
- SQL上门2
			SQL高级教程学习 MySQL的字符匹配和其他数据库不同,一下语句查找(第一个字符不是h,第三个字符是m)不能用“!” select * from country where countryname ... 
- CentOS7.2下安装php加速软件Xcache
			说明: php安装目录:/usr/local/php php.ini配置文件路径:/usr/local/php/etc/php.ini Nginx安装目录:/usr/local/nginx Nginx ... 
- Linux自动化之基于http的pxe安装服务
			PXE: Preboot Excution Environment 预启动执行环境 Intel公司研发 基于Client/Server的网络模式,支持远程主机通过网络从远端服务 ... 
- linux - 运维软件saltstack
			目录 运维软件saltstack 安装使用流程 运维软件saltstack 早期运维人员会根据自己的生产环境来写特定脚本完成大量重复性工作,这些脚本复杂且难以维护.系统管理员面临的问题主要是1.系统配 ... 
- Arduino 串口通讯参考笔记 - Serial 类库及相关函数介绍
			声明: 本ID发布的所有文章及随笔均为原创,可随意转载,单转载文章必须注明作者 aiyauto 及包含原文出处地址 http://www.cnblogs.com/aiyauto/p/7071712.h ... 
- springCloud学习-服务消费者(Feign)
			1.简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单.使用Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解.Fei ... 
