poj2688
#include<iostream>
using namespace std;
#include<time.h>
int m,n;
char map[][];
int vis[][];
typedef struct node
{
int x;
int y;
}node;
node queue[];//放需要清理的点
int total; int dx[]={-,,,};
int dy[]={,,,-};
typedef struct snode
{
int x;
int y;
int step;
}snode;
snode sq[];
int flag,tempdis;
int dis[][];//放脏的地之间的最小步数
int minstep;
int visit[];//脏的点的标志位 void bfs(int sx,int sy,int ex,int ey)
{
int head,tail;
head=tail=;
vis[sx][sy]=;
snode start;
start.x=sx;
start.y=sy;
start.step=;
sq[tail++]=start;
while(head!=tail)
{
snode cur,next;
cur=sq[head++];
if(cur.x==ex&&cur.y==ey)
{
tempdis=cur.step;
break;
}
for(int i=;i<;i++)
{
next.x=cur.x+dx[i];
next.y=cur.y+dy[i];
if(next.x>=&&next.x<m&&next.y>=&&next.y<n&&vis[next.x][next.y]==&&map[next.x][next.y]!='x')
{
vis[next.x][next.y]=;
next.step=cur.step+;
sq[tail++]=next;
}
}
}
} void dfs(int x,int sum,int step)
{
if(sum>minstep)
return;
if(step==total)
{
if(sum<minstep)
minstep=sum;
return;
}
for(int i=;i<=total;i++)//从1开始,因为0的点是开始节点
{
if(visit[i]==)
{
visit[i]=;
dfs(i,sum+dis[x][i],step+);
visit[i]=;
}
}
} int main()
{
//long t1,t2;
//t1=clock();
//freopen("input.txt","r",stdin);
while()
{
cin>>n>>m;
if(n==&&m==)
break;
total=;
for(int i=;i<m;i++)
{
for(int j=;j<n;j++)
{
cin>>map[i][j];
if(map[i][j]=='*')
{
total++;
queue[total].x=i;
queue[total].y=j;
}
if(map[i][j]=='o')
{
queue[].x=i;
queue[].y=j;
}
}
}
for(int i=;i<=total;i++)
{
for(int j=;j<=total;j++)
{
dis[i][j]=;
}
} for(int i=;i<=total;i++)
{
for(int j=i;j<=total;j++)
{
if(i!=j)
{
for(int i=;i<;i++)
for(int j=;j<;j++)
vis[i][j]=;
tempdis=;
bfs(queue[i].x,queue[i].y,queue[j].x,queue[j].y);
dis[i][j]=tempdis;
dis[j][i]=tempdis;
}
if(i==j)
dis[i][j]=;
}
}
flag=;
for(int i=;i<=total;i++)
{
for(int j=;j<=total;j++)
{
if(dis[i][j]==)
{
flag=;
break;
}
}
}
if(flag==)
{
cout<<-<<endl;
continue;
}
minstep=;
dfs(,,);
cout<<minstep<<endl;
}
//t2=clock();
//cout<<t2-t1<<endl;
return ;
}
poj2688的更多相关文章
- 北大poj-2688
Cleaning Robot Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4395 Accepted: 1763 De ...
- HOJ 2226&POJ2688 Cleaning Robot(BFS+TSP(状态压缩DP))
Cleaning Robot Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4264 Accepted: 1713 Descri ...
- POJ2688状态压缩(可以+DFS剪枝)
题意: 给你一个n*m的格子,然后给你一个起点,让你遍历所有的垃圾,就是终点不唯一,问你最小路径是多少? 思路: 水题,方法比较多,最省事的就是直接就一个BFS状态压缩暴搜就行 ...
- hdu&&poj搜索题题号
搜索 hdu1067 哈希 hdu1401 双向搜索 hdu1430 哈希 hdu1667 跌搜+启发式函数 hdu1685 启发式搜索 hdu1813 启发式搜索 hdu1885 状态压缩搜索 hd ...
- Cleaning Robot POJ - 2688
题目链接:https://vjudge.net/problem/POJ-2688 题意:在一个地面上,有一个扫地机器人,有一些障碍物,有一些脏的地砖,问,机器热能不能清扫所有的地砖, (机器人不能越过 ...
随机推荐
- Web从入门到放弃<7>
从这章开始读<javascript高级程序设计> <1>typeof 返回字符串 / 类型 未定义:undefined 布尔:boolean 字符串:string 数值:num ...
- Solr简单使用
1.添加索引 // 第一步:把solrJ的jar包添加到工程中. // 第二步:创建一个SolrServer,使用HttpSolrServer创建对象. SolrServer solrServer = ...
- 微信H5支付证书过滤
在对接微信支付,退款的时候,遇到 Caused by: java.lang.RuntimeException: java.io.IOException: DerInputStream.getLengt ...
- 上传jar包到maven中央仓库过程中遇到的一些问题总结!
网上有很多相关教程, 我按步骤一步步走下来, 都还算顺利, 简单列举一下步骤以及其中需要注意的几个点(不详细, 不适合当教程) 第一步: 到https://issues.sonatype.org/se ...
- webpack proxyTable 跨域
dev-server能在开发环境中生成一个本地服务器来实现代理 在vue-cli下 找的 dev下的 proxyTable: { '/':{ //前缀 target: 'http://www.exam ...
- 1002-谈谈ELK日志分析平台的性能优化理念
在生产环境中,我们为了更好的服务于业务,通常会通过优化的手段来实现服务对外的性能最大化,节省系统性能开支:关注我的朋友们都知道,前段时间一直在搞ELK,同时也记录在了个人的博客篇章中,从部署到各个服务 ...
- JQuery 目录树jsTree插件用法
PHP循环构造目录树结构 <ul> <php> function digui($fid,$level){ $class=M("wangpan_class") ...
- CSS3常用
1.user-select新增特性,主流浏览器都支持 -webkit-user-select: none; /* Chrome all / Safari all /opera15+*/ -moz- ...
- Cmake知识----编写CMakeLists.txt文件编译C/C++程序
1.CMake编译原理 CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多.CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt ...
- Java 获取当前日期的几种方法
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import ja ...