就是一个广搜加一个状态压缩
来源:互联网 发布:js 提取 网页文本 编辑:程序博客网 时间:2024/06/06 12:48
关键错误是在哪个y1,据说y1是在cmath里面的一个函数,不可当做变量使用,真是涨知识。
然后这个是队列的堆,说是队列压得太多了,反正做这种题都要有一个标记数组,不然就不行。
题目链接:点击打开链接
代码:
#include<stdio.h>#include<algorithm>#include<string.h>#include<queue>#include<iostream>#include<ctype.h>using namespace std;//#pragma comment(linker, “/STACK:1024000000,1024000000”)int xx[5]= {0,0,1,-1};int yy[5]= {1,-1,0,0};char q[30][30];int qq2[30][30][2000];int yaoshi[15]= {1,2,4,8,16,32,64,128,256,512};int x1,yy1,t,n,m;struct qq{ int a,b; int step; int yaoshi[30]; int hashzhi;} q1,q2;queue<qq>w;void dfs(int x,int y){ memset(qq2,0,sizeof(qq2)); for(int k=0; k<30; k++) { q1.yaoshi[k]=0; q2.yaoshi[k]=0; } while(!w.empty()) { w.pop(); } q1.a=x; q1.b=y; q1.step=0; q1.hashzhi=0; w.push(q1); qq2[q1.a][q1.b][q1.hashzhi]=1; while(!w.empty()) { qq q3=w.front(); w.pop(); for(int i=0; i<4; i++) { q2.a=q3.a+xx[i]; q2.b=q3.b+yy[i]; q2.step=q3.step+1; q2.hashzhi=q3.hashzhi; if(q2.step>=t) { printf("-1\n"); return ; } if((q2.a==x1)&&(q2.b==yy1)) { if(q2.step<t) { printf("%d\n",q2.step); } else printf("-1\n"); return ; } if(qq2[q2.a][q2.b][q2.hashzhi]) continue; if(q2.a<0||q2.b<0||q2.a>=n||q2.b>=m||q[q2.a][q2.b]=='*') continue; for(int j=0; j<26; j++) q2.yaoshi[j]=q3.yaoshi[j]; if(islower(q[q2.a][q2.b])) { if(q2.yaoshi[q[q2.a][q2.b]-'a']==0) { q2.yaoshi[q[q2.a][q2.b]-'a']=1; if(!qq2[q2.a][q2.b][q2.hashzhi+yaoshi[q[q2.a][q2.b]-'a']]) q2.hashzhi+=yaoshi[q[q2.a][q2.b]-'a']; } } if(isupper(q[q2.a][q2.b])) { if(! q2.yaoshi[q[q2.a][q2.b]-'A']) continue; } qq2[q2.a][q2.b][q2.hashzhi]=1; w.push(q2); } } printf("-1\n"); return ;}int main(){ while(~scanf("%d%d%d",&n,&m,&t)) {//// for (int i=0; i<n; i++)//// {//// for(int j=0; j<m; j++)//// {//// cin>>q[i][j];//////// }//// } for(int i=0; i<n; i++) { scanf("%s",q[i]); } int x,y; for(int i=0; i<n; i++) for(int j=0; j<m; j++) { if(q[i][j]=='@') { x=i; y=j; } else if(q[i][j]=='^') { x1=i; yy1=j; } }// if(x==x1&&y==y1)// printf("0\n");// else dfs(x,y); } return 0;}
0 0
- 就是一个广搜加一个状态压缩
- 1.10 状态选择器: 就是一个xml配置文件
- 世界就是一个班
- 世界就是一个班
- 函数就是一个对象
- 函数就是一个对象
- 感觉就是一个轮回
- 我就是一个悲剧
- 就是一个尿素
- 互联网就是一个江湖
- Vim就是一个锤子
- 人生就是一个状态机
- 路由器就是一个计算机
- 马尔代夫:一个酒店就是一个岛 (组图)
- 一个障碍,就是一个超越自我的契机
- 五一休闲就是一个“泡”
- 开始也许就是一个错误!
- 触发器本身就是一个事务
- Ubuntu16.04 Tomcat9的安装
- Java学习
- 软件开发工具和数据结构导论
- skycloud博客详细设计v1.0
- java nio的使用
- 就是一个广搜加一个状态压缩
- linux系统编程之基础必备(六):可重入函数、线程安全、volatile
- Java学习
- Servlet请求与转发详解
- JAVA入门基础详解之六
- [NOIP2012][二分][差分序列]借教室
- 【排序】直接选择排序
- poj入门水题整理5
- Yii2 - 02控制器、路由、Url生成