2013杭州现场赛B题-Rabbit Kingdom
杭州现场赛的题。BFS+DFS
#include <iostream>
#include<cstdio>
#include<cstring>
#define inf 9999999
using namespace std; char mp[105][105];
int sq[5][5];
int step[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
struct pos
{
int x,y;
}; int n,m,prn,x,y,tmp,ans,cnt;
bool viss[5];
int bfs(pos bg,pos ed)
{
int i;
pos que[20000];
int front=0,rear=1;
bool vis[105][105]={false};
vis[bg.x][bg.y]=true;
que[0]=bg;
int cnt[20000]={0};
if(ed.x==bg.x&&ed.y==bg.y)
return 0;
while(rear>front)
{
for(i=0;i<4;i++)
{
if(que[front].x+step[i][0]>=0&&que[front].x+step[i][0]<n&&que[front].y+step[i][1]>=0&&que[front].y+step[i][1]<m&&
mp[que[front].x+step[i][0]][que[front].y+step[i][1]]!='#'&&!vis[que[front].x+step[i][0]][que[front].y+step[i][1]])
{
que[rear].x=que[front].x+step[i][0];
que[rear].y=que[front].y+step[i][1];
vis[que[rear].x][que[rear].y]=true;
cnt[rear]=cnt[front]+1;
if(que[rear].x==ed.x&&que[rear].y==ed.y)
return cnt[rear];
// cout<<que[rear].x<<' '<<que[rear].y<<endl;
rear++;
}
}
front++;
}
return -1;
}
void cal(int q)
{
int i;
if(cnt==prn)
return;
viss[q]=true;
for(i=1;i<=prn;i++)
{
if(!viss[i])
{
tmp+=sq[q][i];
viss[i]=true;
cnt++;
cal(i);
if(cnt==prn)
if(tmp<ans)
ans=tmp;
cnt--;
tmp-=sq[q][i];
viss[i]=false;
}
}
viss[q]=false;
return;
}
int main()
{
// freopen("in.txt","r",stdin);
while(cin>>n>>m&&(n+m))
{
memset(sq,0,sizeof(sq));
memset(viss,false,sizeof(viss));
int i,j;
ans=inf;
tmp=0;
cnt=0;
pos st;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cin>>mp[i][j];
if(mp[i][j]=='@')
{
st.x=i;
st.y=j;
}
}
}
cin>>prn;
pos pr[4];
for(i=0;i<prn;i++)
{
cin>>pr[i].x>>pr[i].y;
pr[i].x--;
pr[i].y--;
// cout<<pr[i].x<<" "<<pr[i].y<<endl;
}
bool f=true;
for(i=0;i<prn;i++)
{
sq[0][i+1]=bfs(st,pr[i]);
if(sq[0][i+1]==-1)
{
f=false;
break;
}
}
if(!f)
{
cout<<-1<<endl;
continue;
}
for(i=0;i<prn;i++)
{
for(j=0;j<prn;j++)
{
if(i==j)
continue;
int t=bfs(pr[i],pr[j]);
sq[i+1][j+1]=sq[j+1][i+1]=t;
}
}
cal(0);
cout<<ans<<endl;
}
return 0;
}
2013杭州现场赛B题-Rabbit Kingdom的更多相关文章
- HDU 4739 Zhuge Liang's Mines (2013杭州网络赛1002题)
Zhuge Liang's Mines Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- HDU 4738 Caocao's Bridges (2013杭州网络赛1001题,连通图,求桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 4747 Mex (2013杭州网络赛1010题,线段树)
Mex Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- HDU 4741 Save Labman No.004 (2013杭州网络赛1004题,求三维空间异面直线的距离及最近点)
Save Labman No.004 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 4816 Bathysphere (2013长春现场赛D题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4816 2013长春区域赛的D题. 很简单的几何题,就是给了一条折线. 然后一个矩形窗去截取一部分,求最 ...
- HDU 4800/zoj 3735 Josephina and RPG 2013 长沙现场赛J题
第一年参加现场赛,比赛的时候就A了这一道,基本全场都A的签到题竟然A不出来,结果题目重现的时候1A,好受打击 ORZ..... 题目链接:http://acm.hdu.edu.cn/showprobl ...
- 2013 ACMICPC 杭州现场赛 I题
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #in ...
- 2013杭州网络赛C题HDU 4640(模拟)
The Donkey of Gui Zhou Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- HDU 4821 String(2013长春现场赛I题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4821 字符串题. 现场使用字符串HASH乱搞的. 枚举开头! #include <stdio.h ...
随机推荐
- java SE学习之线程同步(详细介绍)
java程序中可以允许存在多个线程,但在处理多线程问题时,必须注意这样一个问题: 当两个或多个线程同时访问同一个变量,并且一些线程需要修改这个变量时,那么这个 ...
- ECC中的CRM UI端摆弄
前段时间想搞CRM了,可是公司没有环境,就去ECC直接试试事务码,结果竟然可以打开网页...兴奋之余又去看了一下CRM里的一些CLASS,结果很多都是没有的.沮丧! 后来想想,只能用UI的框架,挂WD ...
- CentOS查看软件源提供的软件版本命令
yum list available第二列包更详细的说明:yum info packagename
- 一步一步配置NLB(续)之深入测试
在这里http://blog.csdn.net/haoxiaozigang1/article/details/12198679跟大家分享了NLB配置的过程,下面写一些对NLB不同情况的下测试的结果: ...
- linux下不能使用shutdown命令
命令查看: #echo $PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/sbin;/ ...
- ID3
# -*- coding: utf-8 -*- import copy from numpy import * import math class ID3DTree(object): def __in ...
- uva 1210
#include<iostream> #include<cstring> using namespace std; + ; bool notprime[MAXN];//值为fa ...
- 谷歌官方SwipeRefreshLayout下拉刷新的用法。
<Android SwipeRefreshLayout:谷歌官方SDK包中的下拉刷新> 下拉刷新在如今移动开发中应用如此广泛和普遍,以至于谷歌干脆在SDK中给予支持.在android-su ...
- C# 多线程详解 Part.03 (定时器)
Timer 类: 设置一个定时器,定时执行用户指定的函数.定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数. using System; using System.Threadin ...
- 【转】HTML,CSS,font-family:中文字体的英文名称 (宋体 微软雅黑)
宋体 SimSun 黑体 SimHei 微软雅黑 Microsoft YaHei 微软正黑体 Microsoft JhengHei 新宋体 NSimSun 新细明体 PMingLiU 细明体 Ming ...