hdu1044 Collect More Jewels —— dfs + bfs
来源:互联网 发布:战地2 for mac 百度云 编辑:程序博客网 时间:2024/05/16 23:54
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1044
代码如下:
#include<cstdio>//hdu1044 dfs+bfs#include<cstring>#include<queue>#define MAX(a,b) (a>b?a:b)using namespace std;char map[60][60];int dis[15][15],val[15],w,h,l,m,tot,ans, mov[4][2]={0,1,0,-1,1,0,-1,0};int vis2[15],vis1[55][55];struct Node{ int x,y,dist;};void bfs(int sx, int sy, int set){ queue<Node> q; Node cur; cur.x = sx, cur.y = sy, cur.dist = 0; q.push(cur); vis1[sx][sy] = 1; while(!q.empty()) { cur = q.front(), q.pop(); int x = cur.x, y = cur.y, dist = cur.dist; for(int i = 0; i<4; i++) { int xx = x + mov[i][0]; int yy = y + mov[i][1]; if(xx<1 || xx>h || yy<1 || yy>w ) continue; if(!vis1[xx][yy] && map[xx][yy]!='*') { vis1[xx][yy] = 1; if(map[xx][yy]>='A' && map[xx][yy]<='J') dis[set][map[xx][yy]-64] = dist+1; else if(map[xx][yy]=='<' ) dis[set][11] = dist+1; else if(map[xx][yy]=='@' ) dis[set][0] = dist+1; cur.x = xx, cur.y = yy, cur.dist= dist+1; q.push(cur); } } }}void dfs(int set, int path_dis, int sum){ if( ans==tot) return;//少了这步居然超时 if(set==11) ans = MAX(ans,sum); else for(int i = 1; i<=11; i++) if(!vis2[i] && dis[set][i] && dis[set][i]+path_dis<=l) { vis2[i] = 1; dfs(i, dis[set][i]+path_dis, sum+val[i] ); vis2[i] = 0; }}int main(){ int T; scanf("%d",&T); for(int k = 1; k<=T; k++) { scanf("%d%d%d%d",&w,&h,&l,&m); memset(val,0,sizeof(val)); tot = 0; for(int i = 1;i<=m;i++) { scanf("%d",&val[i]); tot += val[i]; } for(int i = 1; i<=h; i++) scanf("%s",map[i]+1); memset(dis,0,sizeof(dis)); for(int i = 1; i<=h; i++) for(int j = 1; j<=w; j++) { memset(vis1,0,sizeof(vis1)); if(map[i][j]=='@') bfs(i,j,0); else if(map[i][j]=='<') bfs(i,j,11); else if(map[i][j]>='A' && map[i][j]<='J') bfs(i,j,map[i][j]-64); } ans = -1; memset(vis2,0,sizeof(vis2)); dfs(0,0,0); printf("Case %d:\n",k); if(ans>=0) printf("The best score is %d.\n",ans); else puts("Impossible"); if(k<T) putchar('\n'); } return 0;}
0 0
- hdu1044 Collect More Jewels —— dfs + bfs
- hdu1044+BFS+DFS+Collect More Jewels
- hdu1044 Collect More Jewels----BFS+DFS
- [BFS]HDU1044 Collect More Jewels
- HDU1044 Collect More Jewels(BFS+DFS+地图压缩)
- HDU1044 Collect More Jewels
- HDU1044 Collect More Jewels
- HDU1044 Collect More Jewels
- hdu1044 Collect More Jewels
- hdu 1044Collect More Jewels ( bfs + dfs )
- HDU-1044 Collect More Jewels BFS + DFS
- HDU 1044 Collect More Jewels(BFS+DFS)
- hdu 1044Collect More Jewels(bfs+dfs)
- HDOJ 1044 Collect More Jewels BFS+DFS
- HDU 1044 Collect More Jewels(BFS+DFS)
- hdu 1044 Collect More Jewels bfs+状态压缩/bfs+dfs
- HDU ACM 1044 Collect More Jewels BFS+DFS
- hdu 1044 Collect More Jewels(BFS+DFS)
- 伸展树(splay)
- python中的setattr的使用
- mac El Capitan+ brew update error 无法访问
- 所谓数据结构
- HDU1372 Knight Moves
- hdu1044 Collect More Jewels —— dfs + bfs
- vs如何运行外部 C++ 文件
- NYOJ小白的成长之路 A+B problem
- Betheme 主题,超强大的wordpress建站主题,很适合企业站
- 蓝桥杯寒假任务之矩阵乘法
- 有效的括号序列
- hdu1045 Fire Net —— dfs
- ubuntu16.04 Atom编辑器配置python环境
- android模拟聊天界面Listview实现