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 题意:在一个地面上,有一个扫地机器人,有一些障碍物,有一些脏的地砖,问,机器热能不能清扫所有的地砖, (机器人不能越过 ...
随机推荐
- 【译】索引进阶(一):SQL SERVER索引介绍
[译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/7 ...
- 易度文档管理系统--http://www.everydo.com/
易度文档管理系统--http://www.everydo.com/ 公司工程技术部门需要,暂收藏.
- JVM--01
---恢复内容开始--- jdk jre jvm 的关系 java7的结构图 java8 jvm内存溢出 jdk /bin 目录下的jconsole java发展历史 oak:用在嵌入式设备上 相 ...
- 树·AVL树/平衡二叉树
1.AVL树 带有平衡条件的二叉查找树,所以它必须满足条件: 1 是一棵二叉查找树 2 满足平衡条件 1.1 平衡条件: 1)严格的平衡条件:每个节点都必须有相同高度的左子树和右子树(过于严格而不被使 ...
- 解决 for xml path encode 的问题
select stuff( (select ', <' + name + '>' from sys.databases where database_id > 4 order by ...
- Dapper结合Repository模式的应用
Dapper结合Repository模式的应用,包括如何在数据访问层(DAL)使用Dapper组件. Dapper在真实项目中使用,扩展IDbConnection的功能,支持Oracle.MS SQL ...
- python面试题之什么是PEP8规范
1 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格. 2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的后边敲回车. 3 类和top ...
- Git基本操作指令
Git是世界上目前最先进的分布式版本控制系统. 工作原理图: Workspace工作区,Index暂存区,Repository本地仓库区,Remote远程仓库. SVN与Git的最主要的区别? SVN ...
- PID控制算法的简单分析和仿真!
PID算法简单剖析如下: 1.首先我们来看一下PID系统的基本组成模块: 如图所示,图中相关参数的表示如下: r(t):系统实际上需要的输出值,这是一个标准值,在我们设定了之后让这个系统去逼近的一个值 ...
- vue v-cloak知识点
1.使用 v-cloak 属性可以解决插值表达式闪烁问题; 2.v-text默认是没有闪烁的问题,同时会覆盖元素中原本的内容,但是v-cloak只会替换 自己的这个占位符,不会替换所有的字符 ...