hdu 1180 诡异的楼梯
来源:互联网 发布:中国校园暴力知乎 编辑:程序博客网 时间:2024/06/09 17:27
诡异的楼梯
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 8775 Accepted Submission(s): 2169
少有的中文广搜题意思不多做解释
解题:除去楼梯的变化就是一个极其简单的广搜模板题 此题加入楼梯的横竖变化也只是多一重判断 注意走楼梯是不计算时间的还有楼梯上是不能停留的只能一步直接“跨”过去所以要特别注意走楼梯的时候的边界(楼梯可以靠着墙也可以直接摆在边界上这种些情况下很容易越界。。)问题
#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<stack>#include<algorithm>using namespace std;struct node{ friend bool operator<(const node a,const node b) { return a.depth>b.depth; } int x,y,depth;};char map[25][25];int sx,sy,ex,ey,n,m;int vis[25][25];int dx[4]={1,0,-1,0};int dy[4]={0,1,0,-1};int bfs(int x,int y){ int i; priority_queue<node> q; node a,b,c; a.x=x; a.y=y; a.depth=0; q.push(a); vis[x][y]=1; while(!q.empty()) { b=q.top(); q.pop(); for(i=0;i<4;i++) { c.x=b.x+dx[i]; c.y=b.y+dy[i]; c.depth=b.depth+1; if(!vis[c.x+dx[i]][c.y+dy[i]]&&(map[c.x][c.y]=='|'||map[c.x][c.y]=='-')&&c.x+dx[i]<n&&c.x+dx[i]>=0&&c.y+dy[i]>=0&&c.y+dy[i]<m&&map[c.x+dx[i]][c.y+dy[i]]!='*') { if(b.depth%2) { if(map[c.x][c.y]=='|') { if(dx[i]==0) { c.x=c.x+dx[i]; c.y=c.y+dy[i]; } else { c.x=c.x+dx[i]; c.y=c.y+dy[i]; c.depth+=1; } } else if(map[c.x][c.y]=='-') { if(dy[i]==0) { c.x=c.x+dx[i]; c.y=c.y+dy[i]; } else { c.depth+=1; c.x=c.x+dx[i]; c.y=c.y+dy[i]; } } } else { if(map[c.x][c.y]=='|') { if(dx[i]==0) { c.x=c.x+dx[i]; c.y=c.y+dy[i]; c.depth+=1; } else { c.x=c.x+dx[i]; c.y=c.y+dy[i]; } } else if(map[c.x][c.y]=='-') { if(dy[i]==0) { c.depth+=1; c.x=c.x+dx[i]; c.y=c.y+dy[i]; } else { c.x=c.x+dx[i]; c.y=c.y+dy[i]; } } } vis[c.x][c.y]=1; if(c.x==ex&&c.y==ey) return c.depth; q.push(c); } else if((map[c.x][c.y]=='.'||map[c.x][c.y]=='T')&&!vis[c.x][c.y]&&c.x<n&&c.x>=0&&c.y<m&&c.y>=0) { vis[c.x][c.y]=1; if(c.x==ex&&c.y==ey) return c.depth; q.push(c); } } } return -1;}int main(){ // freopen("in.txt","r",stdin); int i,j; while(cin>>n>>m) { memset(map,0,sizeof map); memset(vis,0,sizeof vis); for(i=0;i<n;i++) cin>>map[i]; for(i=0;i<n;i++) for(j=0;j<m;j++) { if(map[i][j]=='S') { sx=i;sy=j; } if(map[i][j]=='T') { ex=i;ey=j; } if(map[i][j]=='*') { vis[i][j]==1; } } int ans=bfs(sx,sy); cout<<ans<<endl; } return 0;}
1 0
- hdu 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- HDU 1180 诡异的楼梯
- Hdu-1180(诡异的楼梯)
- HDU 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- 诡异的楼梯 hdu 1180
- HDU-1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- hdu 1180诡异的楼梯
- HDU 1180诡异的楼梯
- hdu 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- HDU 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- HDU 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- find sed sort wc 20140804
- Cocos2d-x 3.2 Lua示例 ClickAndMoveTest(点击移动测试)
- 手把手教你把Vim改装成一个IDE编程环境(图文)
- OC
- cocos2d-x+VS+lua项目(android)(简要记录)
- hdu 1180 诡异的楼梯
- POJ3420 Quad Tiling DP + 矩阵快速幂
- 窗口抖动
- java认识
- POJ1322 Chocolate dp
- C#读取写入配置文件Cinfig.ini方法
- 【LeetCode】Pow(x, n)
- TTL电平、CMOS电平、RS232电平的区别
- BaseAdapter