Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1961 Accepted Submission(s): 921
这道题就是求出能拿到所有宝物的最小路程,如果拿不到就输出-1
暴力得出所有的拿宝物的顺序,然后再用BFS来搜索出最短路径
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<stdlib.h> #include<queue> #include<stack> #include<algorithm> #define LL __int64 using namespace std; const int MAXN=100+5; const int MAX=10+5; const int INF=0x3f3f3f3f; const double EPS=1e-9; int dir4[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; int dir8[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; int dir_8[8][2]={{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1}}; int n,m,k,vis[MAXN][MAXN],d[MAX][MAX]; char map[MAXN][MAXN]; struct node { int x,y; int step; }p[5]; void init() { memset(map,0,sizeof(map)); for(int i=1;i<=n;i++) { scanf("%s",map[i]+1); for(int j=1;j<=m;j++) if(map[i][j]==‘@‘) { p[0].x=i; p[0].y=j; } } scanf("%d",&k); for(int i=1;i<=k;i++) scanf("%d %d",&p[i].x,&p[i].y); } int BFS(node star,node en) { queue<node> Q; memset(vis,0,sizeof(vis)); vis[star.x][star.y]=1; star.step=0; Q.push(star); while(!Q.empty()) { node now,next; now=Q.front(); Q.pop(); if(now.x==en.x && now.y==en.y) return now.step; for(int i=0;i<4;i++) { next.x=now.x+dir4[i][0]; next.y=now.y+dir4[i][1]; if(0<next.x && next.x<=n && 0<next.y && next.y<=m && !vis[next.x][next.y] && map[next.x][next.y]!=‘#‘) { vis[next.x][next.y]=1; next.step=now.step+1; Q.push(next); } } } return -1; } bool judge() { memset(d,0,sizeof(d)); for(int i=0;i<=k;i++) { for(int j=i+1;j<=k;j++) { int dis=BFS(p[i],p[j]); if(dis==-1) return false; d[i][j]=d[j][i]=dis; } } return true; } int solve() { int p[MAX],ans=INF; for(int i=0;i<=k;i++) p[i]=i; do { int sum=0; for(int i=0;i<k;i++) sum+=d[p[i]][p[i+1]]; ans=min(sum,ans); }while(next_permutation(p+1,p+1+k)); return ans; } int main() { while(scanf("%d %d",&n,&m) && (n||m)) { init(); if(judge()) printf("%d\n",solve()); else printf("-1\n"); } return 0; }
HDU 4771 Stealing Harry Potter's Precious(BFS)
原文:http://www.cnblogs.com/clliff/p/4236225.html