acdream1242 水BFS
来源:互联网 发布:mint linux 编辑:程序博客网 时间:2024/06/04 18:54
题意:就是很简单路径寻找 然后而外的要求是打印出任意一条最短的路径 然后真是太爽了 在不明题意的情况下乱写
解法 直接上bfs 每一个点最多只经过一次 然后标记为-1就可以了 只要代码没有什么问题就可以了
反而起点的选择不是很重要 如果要把真正的起点当作起点的话 也是可以的 具体做法就是再从终点开始找出一条路径上的点 然后加进一个stack里面就可以了
真是太桑心了 本来是奔着一血去的 然后坑了全场 T了4发写大摸你的滚粗了
#include<queue>#include<cstdio>#include<cstring>#include<iostream>using namespace std;int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};int dir[3][4]={{0,1,2,3},{1,2,3,0},{3,0,1,2}};struct node{ int x,y; node (int x=0,int y=0):x(x),y(y){}}e[888888];int m,n,mind[888][888];char mp[888][888],dc[3]={'F','L','R'};int main(){ scanf("%d%d",&n,&m); getchar(); memset(mp,0,sizeof mp); for(int i=1;i<=2*n-1;++i){ gets(mp[i]+1); } for(int i=0;i<=2*n;++i) for(int j=0;j<=2*m;++j)mind[i][j]=-1;// for(int i=1;i<=2*n-1;++i){// for(int j=1;j<=2*m-1;++j)// printf("%c",city[i][j]);// printf("\n");// } queue<node>q; mind[1][2*m-1]=0; q.push(node(1,2*m-1)); node now,nxt; while(!q.empty()){ int x=q.front().x,y=q.front().y;q.pop(); for(int i=0;i<4;++i){ int xx=x+dx[i],yy=y+dy[i]; if(mp[xx][yy]=='-'||mp[xx][yy]=='|'){// printf("%d %d\n",xx,yy); xx+=dx[i]; yy+=dy[i];// printf("%d %d\n\n",xx,yy); if(mind[xx][yy]==-1){// printf("in:%d %d\n",xx,yy); mind[xx][yy]=mind[x][y]+1; q.push(node(xx,yy)); }}}}// for(int i=1;i<=2*n-1;++i){// for(int j=1;j<=2*m-1;++j)printf("%d ",mind[i][j]);// printf("\n");// } int d;// printf("%c %d\n",city[2*n-2][1],mind[2*n-3][1]);// printf("%c %d\n",city[2*n-1][2],mind[2*n-1][3]); if(mp[2*n-2][1]=='|'&&mind[2*n-3][1]==mind[2*n-1][1]-1){ puts("N");now.x=2*n-3,now.y=1,d=2; }else if(mp[2*n-1][2]=='-'&&mind[2*n-1][3]==mind[2*n-1][1]-1){ puts("E");now.x=2*n-1,now.y=3;d=1; } while(1){ int x=now.x,y=now.y; if(mind[x][y]==0){printf("\n");break;} for(int k=0;k<3;++k){ int xx=x+dx[dir[k][d]]; int yy=y+dy[dir[k][d]]; if(mp[xx][yy]=='-'||mp[xx][yy]=='|'){ xx+=dx[dir[k][d]];yy+=dy[dir[k][d]]; if(mind[xx][yy]==mind[x][y]-1){ now.x=xx,now.y=yy; d=dir[k][d]; printf("%c",dc[k]); break; } } } } return 0;}
0 0
- acdream1242 水BFS
- POJ 3278 水BFS
- HDU 5012 BFS水
- HDU 2612 水BFS
- poj 3278 水bfs
- UVA439 水,枚举+BFS
- bzoj 2464 BFS【水】
- BFS
- bfs
- BFS
- BFS
- bfs
- BFS
- bfs
- BFS
- BFS
- bfs
- BFS
- leetcode - Unique Binary Search Trees II
- POJ 2318 TOYS(叉积+二分查找)
- leetcode - Binary Tree Inorder Traversal
- ListView高度设置
- 如何成为一名Top DevOps Engineer
- acdream1242 水BFS
- 新生感悟
- 企业视觉-大型电商(系统)高性能-用户视觉性能(1)
- Python串口功能实现
- 按钮制作技巧(css精灵效果)-高级版
- C# 枚举数和迭代器总结
- <<点一根烟燃烧孤独>>-------湘夫人
- 怎么查看别人的短信内容,如何查询别人的手机短信,短信内容可以查吗.联系qq.2540400410
- Ferguson游戏(清空分割游戏) hdu2147