HDU 4771 Stealing Harry Potter's Precious(2013 Asia Hangzhou Regional Contest )
来源:互联网 发布:百度开放云域名 编辑:程序博客网 时间:2024/05/16 06:48
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4771
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<string>#include<algorithm>#include<queue>#include<stack>#include<vector>#include<set>#include<map>#include<list>#define mem(x,y)memset(x,y,sizeof(x))#define max(a,b)(a)>(b)?(a):(b)#define min(a,b)(a)<(b)?(a):(b)#define INF 0x1f1f1f1f#define M 10000007#define eps 1e-10using namespace std;typedef long long int LL;typedef __int64 ll;const int maxn=105;struct node{ int x,y;};node q[maxn];struct qq{ int xi,yi,step;};char a[maxn][maxn];int b[maxn][maxn];int vis[maxn][maxn];int V[maxn];int flag;int n,m,k,minn;int fx[4]={1,-1,0,0};int fy[4]={0,0,1,-1};int check(int xx,int yy){ if(xx>=0&&xx<n&&yy>=0&&yy<m&&!vis[xx][yy]&&a[xx][yy]!='#') { return 1; } return 0;}int bfs(node ss,node ee){ int i; mem(vis,0); queue <qq> qi; while(!qi.empty()) { qi.pop(); } qq now,next,start; start.xi=ss.x; start.yi=ss.y; start.step=0; vis[ss.x][ss.y]=1; qi.push(start); while(!qi.empty()) { now=qi.front(); qi.pop(); //printf("***%d %d\n",now.xi,now.yi); if(now.xi==ee.x&&now.yi==ee.y) { return now.step; } for(i=0;i<4;i++) { int xxx=now.xi+fx[i]; int yyy=now.yi+fy[i]; if(check(xxx,yyy)) { next.xi=xxx; next.yi=yyy; next.step=now.step+1; vis[xxx][yyy]=1; qi.push(next); } } } return -1;}void dfs(int ii,int ss,int sum){ int i; V[ii]=1; if(ss==k) { minn=min(minn,sum); return ; } for(i=0;i<=k;i++) { if(!V[i]&&b[ii][i]!=INF) { if(b[ii][i]==-1) { flag=1; } dfs(i,ss+1,sum+b[ii][i]); V[i]=0; } }}int main(){ int i,j; while(~scanf("%d %d",&n,&m)) { if(n==0&&m==0)break; int sx,sy; for(i=0;i<n;i++) { for(j=0;j<m;j++) { cin>>a[i][j]; if(a[i][j]=='@') { sx=i; sy=j; } } } scanf("%d",&k); q[0].x=sx; q[0].y=sy; int xx,yy; for(i=1;i<=k;i++) { scanf("%d %d",&xx,&yy); q[i].x=xx-1; q[i].y=yy-1; } mem(b,INF); for(i=0;i<k;i++) { for(j=i+1;j<=k;j++) { b[i][j]=bfs(q[i],q[j]); b[j][i]=b[i][j]; } } mem(V,0); minn=INF; flag=0; dfs(0,0,0); if(flag)printf("-1\n"); else printf("%d\n",minn); } return 0;}
0 0
- HDU 4771 Stealing Harry Potter's Precious(2013 Asia Hangzhou Regional Contest )
- hdu4771 Stealing Harry Potter's Precious 2013 Asia Hangzhou Regional Contest
- hdu4771 BFS Stealing Harry Potter's Precious (2013 Asia Hangzhou Regional Contest problem B)
- hdu 4771 - Stealing Harry Potter's Precious
- HDU:4771 Stealing Harry Potter's Precious
- HDU 4771 Stealing Harry Potter's Precious
- hdu 4771 Stealing Harry Potter's Precious
- hdu 4771 Stealing Harry Potter's Precious
- HDU 4771 Stealing Harry Potter's Precious
- hdu 4771 Stealing Harry Potter's Precious
- hdu 4771 Stealing Harry Potter's Precious
- HDU 4771 Stealing Harry Potter's Precious
- hdu 4771 Stealing Harry Potter's Precious
- HDU 4771 Stealing Harry Potter's Precious
- hdu 4771 Stealing Harry Potter's Precious
- HDU 4771 Stealing Harry Potter's Precious
- HDU 4771 Stealing Harry Potter's Precious
- HDU 4771Stealing Harry Potter's Precious
- 黑客的日常生活是怎样的?论黑客的道德与操守
- Java入门第二季-2.封装
- 409.leetcode Longest Palindrome(easy)[字符串处理 最长回文]
- linux命令wget
- Android组件间通信库EventBus学习
- HDU 4771 Stealing Harry Potter's Precious(2013 Asia Hangzhou Regional Contest )
- XP系统老电脑是时候提升系统速度了 几招轻松搞定
- css hack
- ubuntu 安装virtualbox
- Angular(二)服务
- RadioButton与RadioGroup
- c++之链表篇1:单向链表的创建,打印,删除,插入,销毁等基本操作
- 请不要重复犯我在学习Python和Linux系统上的错误
- MySQL架构与概念