hdu 4771 Stealing Harry Potter's Precious (2013亚洲区杭州现场赛)(搜索 bfs + dfs) 带权值的路径
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4771
题目意思:'@' 表示的是起点,'#' 表示的是障碍物不能通过,'.' 表示的是路能通过的;
目的:让你从 '@' 点出发,然后每个点只能走一次,求出最小的距离;
解题思路:先用 bfs 求解出任意两点之间的距离,用 ans[i][j],表示点 i 到点 j 的距离;
然后用 dfs 递归求出从起点经过所有点的距离中,比较出最小的;
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#include<string>
#include<cmath>
using namespace std;
int dir[][]={,,,-,,,-,};
int m,n;
int sx,sy,T;
int ans[][];//点之间的距离
char Map[][];
int vis[][];//标记路径
struct node
{
int x,y,step;
}a[],now,eed;
int bfs(int T1,int ee,int vv)
{
int TT=;
vis[a[T1].x][a[T1].y]=vv;//每次标记的都发生了变化,这样vis数组不用每次都清零
queue< node >p;
now.x = a[T1].x;
now.y = a[T1].y;
now.step = ;
p.push(now);
while(!p.empty())
{
now=p.front();
p.pop();
for(int i=T1+; i<=T; i++)
{
if(now.x == a[i].x && now.y == a[i].y)
{
ans[T1][i]=ans[i][T1] = now.step;
TT++;
}
}
for(int i=; i<; i++)
{
eed.x = now.x + dir[i][]; eed.y = now.y + dir[i][];
if(eed.x>= && eed.x<=m && eed.y>= && eed.y<=n && vis[eed.x][eed.y]!=vv && Map[eed.x][eed.y]!='#')
{
eed.step = now.step+;
vis[eed.x][eed.y] = vv;
p.push(eed);
}
}
if(TT == ee) //如果该访问的点都访问了,直接返回;
return ;
}
return - ;//如果其中有点不能访问到,直接返回-1,输出 -1 ;
} int net[],ans1;
void dfs(int x,int step,int sum)
{
if(step==T)
{
if(ans1>sum) ans1=sum;
return;
}
for(int i=;i<=T;i++)
if(!net[i])
{
net[i]=;
dfs(i,step+,sum+ans[x][i]);
net[i]=;
}
}
int main()
{
int x,y;
// freopen("in1.txt","r",stdin);
// freopen("out1.txt","w",stdout);
while(cin>>m>>n && m+n)
{
ans1=;
memset(ans,,sizeof(ans));
memset(net,,sizeof(net));
memset(vis,,sizeof(vis));
for(int i=; i<=m; i++)
for(int j=; j<=n; j++)
{
scanf(" %c",&Map[i][j]);
if(Map[i][j] == '@')
{
sx= i; sy = j;
}
}
scanf("%d",&T);
a[].x=sx; a[].y=sy;
for(int i=; i<=T; i++)
{
scanf("%d %d",&x,&y);
a[i].x = x;
a[i].y = y;
}
int flag = ;
for(int i = ; i<T; i++)
{ flag = bfs(i,T-i,i+);
if(flag == -)
break;
}
if(flag == -)
printf("-1\n");
else
{
net[]=;
dfs(,,);
printf("%d\n",ans1);
}
}
return ;
}
hdu 4771 Stealing Harry Potter's Precious (2013亚洲区杭州现场赛)(搜索 bfs + dfs) 带权值的路径的更多相关文章
- HDU 4771 Stealing Harry Potter's Precious (2013杭州赛区1002题,bfs,状态压缩)
Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- HDU 4771 Stealing Harry Potter's Precious dfs+bfs
Stealing Harry Potter's Precious Problem Description Harry Potter has some precious. For example, hi ...
- HDU 4771 Stealing Harry Potter's Precious
Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- 【HDU 4771 Stealing Harry Potter's Precious】BFS+状压
2013杭州区域赛现场赛二水... 类似“胜利大逃亡”的搜索问题,有若干个宝藏分布在不同位置,问从起点遍历过所有k个宝藏的最短时间. 思路就是,从起点出发,搜索到最近的一个宝藏,然后以这个位置为起点, ...
- hdu 4771 Stealing Harry Potter's Precious (BFS+状压)
题意: n*m的迷宫,有一些格能走("."),有一些格不能走("#").起始点为"@". 有K个物体.(K<=4),每个物体都是放在& ...
- hdu 4771 Stealing Harry Potter's Precious(bfs)
题目链接:hdu 4771 Stealing Harry Potter's Precious 题目大意:在一个N*M的银行里,贼的位置在'@',如今给出n个宝物的位置.如今贼要将全部的宝物拿到手.问最 ...
- hdu 4771 Stealing Harry Potter's Precious
题目:给出一个二维图,以及一个起点,m个中间点,求出从起点出发,到达每一个中间的最小步数. 思路:由于图的大小最大是100*100,所以要使用bfs求出当中每两个点之间的最小距离.然后依据这些步数,建 ...
- 2013 ACMICPC 杭州现场赛 I题
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #in ...
- 2013 Asia acm Hangzhou Regional Contest 杭州现场赛
B Stealing Harry Potter's Precious 题目大意:给定一个n*m的地图,某些点可以走,某些点可以走某些点不可以走,给定一个起点,又给出了k个点k<=4,要求从起点 ...
随机推荐
- c# 冒号:C#中两个冒号(::)的作用
global::System.Console.WriteLine(number); 冒号在什么地方用. 点是空间下类,表示下一层的意思? 这里面::前面是GAC的标示符global,用法比较特殊,和. ...
- TCP为何采用三次握手来建立连接,若采用二次握手可以吗?
首先简单介绍一下TCP三次握手 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_ ...
- SparkSQL之更改表结构
本文篇幅较短,内容源于自己在使用SparkSQL时碰到的一个小问题,因为在之后的数据处理过程中多次使用,所以为了加深印象,在此单独成文,以便回顾. 场景 在使用SparkSQL进行数据处理时,碰到这样 ...
- RocketMQ概念整理
DefaultMessageStore 消息的存储和提取. 相对重要的两个方法: 消息存储 PutMessageResult putMessage(MessageExtBrokerInner msg) ...
- Jconsole
Jconsole 1.1 简介以及连接 JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,它是Java自带的简单性能监控工具.下面以对tomcat的监控为例,带领大家熟悉Jcon ...
- ZT:没有谁的成功是横空出世
这世上,没有谁的成功是横空出世. 你看到的胸有成竹,是别人犯过错后的顿悟: 你看到的举重若轻,是别人跌过跤后的自省: 你看到的闪亮光环,是一个人咬牙走了很久的夜路,才为自己点亮的一盏灯. 你以为自己输 ...
- 实现淡入淡出效果的组件,继承自JComponent
由于仅贴出代码,供有缘人参考. import java.awt.AlphaComposite; import java.awt.Graphics; import java.awt.Graphics2D ...
- C中strstr的实现方法
做题目的时候须要自己实现strstr函数 /************************************************************************/ /* 编 ...
- Windows下如何替换鼠标指针
鼠标指针替换(应用)教程美化 讲解如何替换鼠标指针,从网上下载的鼠标指针该怎么替换呢?认真看完下边的就会了!鼠标指针常见的文件格式为:.cur..ani两种格式.还可能有的是.exe 格式如果是exe ...
- JMeter 十六:加密处理
假设采用MD5进行加密 JMeter 内置的没有MD5加密方法.网上有说采用__MD5函数的,但是我在 Jmeter 2.13 以及 Jmeter 3.2 版本上都没有找到这个函数,官方文档也没有看到 ...