HDU
来源:互联网 发布:qq三国白菜数据 编辑:程序博客网 时间:2024/05/17 08:52
这个题目
题意有问题。按道理说在T时刻到达,奇偶剪枝后的情况是符合的,,,,突然想到,他似乎是可以停的;莫不是因为这。。。。
样例:
15 5 14S*#*..#........****....#...*.P#.*..***.....*.*.#..outputYES
用的dfs超时了,然后剪枝之后就wa了
不过最大的wa点在于,#之后的传送,cnt应该也是+1的,因为他是 从前一步挪过来的;而我一直没有加1
就是错在了这里;
有一个注意点就是# 和# 之间的传送,出现这种情况是错误的
bfs的代码。。。这么一个水题。。。补了一下午吐血
#include <iostream>#include<cstring>#include<string>#include<set>#include<map>#include<queue>#include<algorithm>using namespace std;const int maxn=15;char mp[3][maxn][maxn];char down[maxn][maxn];int xx0,yy0;int xxn,yyn;int m,n;int t;int dx[]={0,0,-1,1};int dy[]={1,-1,0,0};int flag;struct node{ int x,y,z; int t; node(int xx=0,int yy=0,int zz=0,int tt=0) { x=xx;y=yy;z=zz;t=tt; }};int vis[3][maxn][maxn];void bfs(){ vis[0][xx0][yy0]=1; queue<node> q; q.push(node(xx0,yy0,0,0)); while(q.size()) { if(flag) return; node a=q.front();q.pop(); // cout<<" a="<<a.z<<" "<<a.x<<" "<<a.y<<endl; if(a.t+1>t) continue; for(int i=0;i<4;i++) { int xx=a.x+dx[i],yy=a.y+dy[i]; if(xx>=0&&yy>=0&&xx<n&&yy<m&&mp[a.z][xx][yy]!='*'&&!vis[a.z][xx][yy]) { vis[a.z][xx][yy]=1; if(mp[a.z][xx][yy]=='.') { q.push(node(xx,yy,a.z,a.t+1)); } else if(mp[a.z][xx][yy]=='#') { if(mp[(a.z+1)%2][xx][yy]=='.'&&!vis[(a.z+1)%2][xx][yy]) { vis[(a.z+1)%2][xx][yy]=1; q.push(node(xx,yy,(a.z+1)%2,a.t+1)); } else if(mp[(a.z+1)%2][xx][yy]=='P') { if(a.t+1<=t) { flag=1; return ; } } } else if(mp[a.z][xx][yy]=='P') { //cout<<" ss"<<endl; if(a.t+1<=t) { flag=1; return; } } } } }}int main(){ int T; cin>>T; while(T--) { memset(vis,0,sizeof(vis)); flag=0; cin>>n>>m>>t; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { cin>>mp[0][i][j]; if(mp[0][i][j]=='S') { xx0=i;yy0=j; } } for(int i=0;i<n;i++) for(int j=0;j<m;j++) { cin>>mp[1][i][j]; if(mp[1][i][j]=='P') { xxn=i;yyn=j; } } bfs(); if(flag) cout<<"YES"<<endl; else cout<<"NO"<<endl; } // cout << "Hello world!" << endl; return 0;}
,哦,莫名其妙的dfs......
暂时不想改了
#include <iostream>#include<cstring>#include<string>#include<set>#include<map>#include<queue>#include<algorithm>using namespace std;const int maxn=15;char up[maxn][maxn];char down[maxn][maxn];int xx0,yy0;int xxn,yyn;int m,n;int t;int dx[]={0,0,-1,1};int dy[]={1,-1,0,0};int flag;int vis1[maxn][maxn];int vis2[maxn][maxn];int ABS(int x) {return x<0?-x:x;}void dfs(int x,int y,int z,int cnt){ //cout<<x<<" "<<y<<endl; if(flag) return; if(x==xxn&&y==yyn&&z==-1) { // cout<<cnt<<endl; if(cnt<=t) { flag=1; return ; } else return ; } if(cnt>t) { // cout<<x<<" "<<y<<" "<<z<<endl; return; } int remain=ABS(x-xxn)+ABS(y-yyn)-ABS(cnt-t); if(remain>0||remain&1) return; for(int i=0;i<4;i++) { int xx=x+dx[i],yy=y+dy[i]; if(flag) return ; if(z==1) { if(xx>=0&&yy>=0&&xx<n&&yy<m&&up[xx][yy]!='*'&&!vis1[xx][yy]) { //cout<<xx<<" "<<yy<<" u p"<<endl; vis1[xx][yy]=1; if(up[xx][yy]=='.') { dfs(xx,yy,1,cnt+1); } else if(up[xx][yy]=='#') { if(down[xx][yy]=='.') { vis2[xx][yy]=1; dfs(xx,yy,-1,cnt+1); vis2[xx][yy]=0; } else if(down[xx][yy]=='P') { if(cnt<=t) { flag=1; return ; } return; } } vis1[xx][yy]=0; } } else { if(xx>=0&&yy>=0&&xx<n&&yy<m&&down[xx][yy]!='*'&&!vis2[xx][yy]) { vis2[xx][yy]=1; if(down[xx][yy]=='.') { dfs(xx,yy,-1,cnt+1); } else if(down[xx][yy]=='P') { //cout<<cnt<<endl; if(cnt<=t) { flag=1; return ; } else return; } else if(down[xx][yy]=='#') { if(up[xx][yy]=='.') { vis1[xx][yy]=1; dfs(xx,yy,1,cnt+1); vis1[xx][yy]=0; } } vis2[xx][yy]=0; } } }}int main(){ int T; cin>>T; while(T--) { memset(vis1,0,sizeof(vis1)); memset(vis2,0,sizeof(vis2)); flag=0; cin>>n>>m>>t; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { cin>>up[i][j]; if(up[i][j]=='S') { xx0=i;yy0=j; } } for(int i=0;i<n;i++) for(int j=0;j<m;j++) { cin>>down[i][j]; if(down[i][j]=='P') { xxn=i;yyn=j; } } if(flag) cout<<"YES"<<endl; else cout<<"NO"<<endl; } // cout << "Hello world!" << endl; return 0;}水题不会,,难题不会。。。我怕是要死了
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- 一个通用下拉刷新RecyclerRefreshLayout控件
- 数据库-SQL语言的功能
- SpringBoot初始教程之项目结构(一)
- java 将jsonarray 转化为对应键值的jsonobject
- SpringMVC 之 Validation介绍—— 使用Validator接口进行验证
- HDU
- extern"C"到底做了什么,起流什么作用
- linux虚拟机网络配置
- .net 开发日志
- 计算机网络基础知识——(二)
- Android手机中UID、PID作用及区别
- JAVA集合类汇总
- Android listview的item中button的点击事件 item和button 可同时点击
- linux乱码