Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=1044

先BFS求出起始位置,宝石,出口,任意2点的最短距离

再DFS搜索所有的可能性

我的代码
 1 #include <cstdio>
2 #include <cctype>
3 #include <cstring>
4 #include <queue>
5 using namespace std;
6 const int N=60;
7 const int dx[4]={0,1,0,-1};
8 const int dy[4]={1,0,-1,0};
9 char maze[N][N];
10 int dis[N][N],vis[N][N];
11 int n,m,w,t,a[15][15],val[15],vis2[15],ans,sum;
12 queue<int> q;
13 void bfs(int x,int y,int s)
14 {
15 while (!q.empty()) q.pop();
16 int u,v;
17 int nx,ny,nw;
18 vis[x][y]=1; dis[x][y]=0;
19 u=x*m+y;
20 q.push(u);
21 while (!q.empty())
22 {
23 u=q.front(); q.pop();
24 x=u/m; y=u%m;
25 for (int d=0;d<4;d++)
26 {
27 nx=x+dx[d]; ny=y+dy[d];
28 if (nx<0 || nx>=n || ny<0 || ny>=m) continue;
29 if (vis[nx][ny] || maze[nx][ny]=='*') continue;
30 vis[nx][ny]=1;
31 dis[nx][ny]=dis[x][y]+1;
32 if (maze[nx][ny]=='@') a[s][0]=dis[nx][ny];
33 else if (isalpha(maze[nx][ny])) a[s][maze[nx][ny]-64]=dis[nx][ny];
34 else if (maze[nx][ny]=='<') a[s][w+1]=dis[nx][ny];
35 v=nx*m+ny;
36 q.push(v);
37 }
38 }
39 }
40 void dfs(int p,int s,int x)
41 {
42 if (x>t || ans==sum) return;
43 if (p>w && s>ans) ans=s;
44 int i;
45 for (i=0;i<=w+1;i++)
46 {
47 if (a[p][i]==0 || vis2[i]) continue;
48 vis2[i]=1;
49 dfs(i,s+val[i],x+a[p][i]);
50 vis2[i]=0;
51 }
52 }
53 int main()
54 {
55 int T,C=0,i,j;
56 scanf("%d",&T);
57 while (T--)
58 {
59 ans=-1; sum=0;
60 memset(a,0,sizeof(a));
61 memset(val,0,sizeof(val));
62 scanf("%d%d%d%d",&m,&n,&t,&w);
63 for (i=1;i<=w;i++) {scanf("%d",&val[i]); sum+=val[i];}
64 for (i=0;i<n;i++) scanf("%s",maze[i]);
65 for (i=0;i<n;i++) for (j=0;j<m;j++)
66 {
67 memset(dis,0,sizeof(dis));
68 memset(vis,0,sizeof(vis));
69 if (maze[i][j]=='@') bfs(i,j,0);
70 else if (isalpha(maze[i][j])) bfs(i,j,maze[i][j]-64);
71 else if (maze[i][j]=='<') bfs(i,j,w+1);
72 }
73 memset(vis2,0,sizeof(vis2)); vis2[0]=1;
74 dfs(0,0,0);
75 printf("Case %d:\n",++C);
76 if (ans>=0) printf("%The best score is %d.\n",ans);
77 else printf("Impossible\n");
78 if (T) printf("\n");
79 }
80 return 0;
81 }

 

posted on 2011-12-17 18:17  Qiuqiqiu  阅读(331)  评论(0编辑  收藏  举报