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 题意:在一个地面上,有一个扫地机器人,有一些障碍物,有一些脏的地砖,问,机器热能不能清扫所有的地砖, (机器人不能越过 ...
随机推荐
- Spring Cloud Context模块
SpringCloud这个框架本身是建立在SpringBoot基础之上的,所以使用SpringCloud的方式与SpringBoot相仿.也是通过类似如下代码进行启动. SpringApplicati ...
- 还在期待安卓9.0吗?Android 10.0要来了
目前,美国 Google公司的 AndroidP (安卓9.0),已经正式全面推出有几个多月了.众多手机品牌厂商也都在积极的进行更新适配 Android 9.0 系统(修改UI界面也算是二次开发,嗯) ...
- 加密:HashUtils,RSAUtil,AESUtils
import java.security.MessageDigest; public class HashUtils { public static String getMD5(String sour ...
- pip install psycopg2出现python setup.py egg_info failed with error code 1 in /tmp/pip-build-YtLeN3/psycopg2错误处理
折腾了一上午flask部署,到最后访问域名还是出现Application Error错误提示.估计是程序还有问题,想着直接clone书中作者的代码先试试能不能部署成功.结果在执行pip install ...
- github密钥
官网英文资料:https://help.github.com/articles/connecting-to-github-with-ssh/ 1.生成SSH keys文件id_rsa.pub ssh- ...
- [原创]基于Zynq AXI-GPIO Standalone & Linux 例程
基于Zynq AXI-GPIO Standalone & Linux 例程 待添加完善中
- 批量导出hive表的建表语句
转的这里的 首先先导出所有的table表 hive -e "use xxxdb;show tables;" > tables.txt 然后再使用hive内置语法导出hive表 ...
- Linux 添加到环境变量
在Linux下使用源码安装软件的时候,通常只能在软件安装目录下使用该软件命令,这样太麻烦,我们希望全局使用,可以将软件安装路径添加到系统环境变量里. 添加环境变量有2种方法: 1. 使用export命 ...
- request请求携带证书,如:微信企业零钱付款
const Promise = require('bluebird') const request = Promise.promisifyAll(require('request')) const w ...
- MyBatis入门(一)SqlSessionFactory
(1)新建数据库 CREATE TABLE emp ( id INT ( 10 ) PRIMARY KEY auto_increment, last_name VARCHAR(255), gender ...