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 题意:在一个地面上,有一个扫地机器人,有一些障碍物,有一些脏的地砖,问,机器热能不能清扫所有的地砖, (机器人不能越过 ...
随机推荐
- 动态加载机Servlet容器加载器
动态加载是Servlet 3.0中的新特性,它可以实现在 不重启Web应用的情况下加载新的Web对象(Servlet. Filter.Listener).Servlet容器加载器也是Servlet 3 ...
- hash与encrypt
概括来说,哈希(Hash)是将目标文本转换成具有相同长度的.不可逆的杂凑字符串(或叫做消息摘要),而加密(Encrypt)是将目标文本转换成具有不同长度的.可逆的密文. 具体来说,两者有如下重要区别: ...
- CSS选择器权重计算
CSS各种选择器的权重: 1.ID选择器 +100 2.类.属性.伪类选择器 +10 3.元素.伪元素选择器 +1 4.其他选择器 +0 如果有两个CSS样式都作用于某元素,如: #id ...
- [转] Redux入门教程(快速上手)
学习前提 在我们开始以前,确保你熟悉以下知识: 函数式JavaScript 面向对象JavaScript JavaScript ES6 语法 同时,确保你的设备已经安装: NodeJS Yarn(或者 ...
- bool值的底层应用场景
这里我们的if 或者while,还有and,or,not 等都是在内部调用一个对象的bool方法,然后返回True或者是False, a = [0, ] # a = [] # print(bool(a ...
- Servlet(六):Cookie
Cookie 学习:问题: HTTP 协议是没有记忆功能的,一次请求结束后,相关数据会被销毁.如果第二次的请求需要使用相同的请求数据怎么办呢?难道是让用户再次请求书写吗?解决: 使用 Cookie 技 ...
- 将cookie 转换成字典格式
b = 'bid=Qzw9cKnyESM; ll="108288"; __yadk_uid=4YChvgeANLBEh4iV00n1tc0HQ8zpmSl1; __utmc=301 ...
- JDK配置环境变量不成功的原因
根据自己配置环境变量遇到的问题进行总结: 1.二次安装需要注意的问题 由于已经安装了一次的原因,此时的注册表已经有了安装记录. 建议删除jdk的记录 首先打开注册表 开始菜单→运行.或者直接键盘按下W ...
- 20172328 2018-2019《Java软件结构与数据结构》第五周学习总结
20172328 2018-2019<Java软件结构与数据结构>第五周学习总结 概述 Generalization 本周学习了第九章:排序与查找,主要包括线性查找和二分查找算法和几种排序 ...
- python爬虫遇到https站点InsecureRequestWarning警告解决方案
python爬虫遇到https站点InsecureRequestWarning警告解决方案 加三行代码即可 from requests.packages.urllib3.exceptions impo ...