http://poj.org/problem?id=3083纠结了好久 被它的转向搞晕 了

WA两次 加一else AC。。

设置四个方向 初始化方向自己算出来 初始化在数组中 dfs+bfs

左  就是当前方向向左 左走不动就逆时针走下一个方向  依次类推 右同样的方式

View Code

  1 #include <iostream>
  2  #include<cstdio>
  3  #include<cstring>
  4  using namespace std;
  5  char s[50][50],so[2];
  6  int pr[7],dis[4][2]={-1,0,0,-1,1,0,0,1},vis[50][50],n,m,flag;
  7  int dir[2][4][4] = {{{1, 0, 3, 2}, {2, 1, 0, 3}, {3, 2, 1, 0}, {0, 3, 2, 1}},{{3, 0, 1, 2}, {0, 1, 2, 3}, {1, 2, 3, 0}, {2, 3, 0, 1}}};
  8  struct node
  9  {
 10      int x,y,num;
 11  }q[100010];
 12  int judge(int x,int y)
 13  {
 14      if(x<1||x>n||y<1||y>m)
 15      return 0;
 16      if(s[x][y]=='#')
 17      return 0;
 18      return 1;
 19  }
 20  void bfs()
 21  {
 22      int i,j,p = 0, d = 1;
 23      memset(vis,0,sizeof(vis));
 24      q[d].x = so[0];
 25      q[d].y = so[1];
 26      q[d].num = 1;
 27      vis[so[0]][so[1]] = 1;
 28      while(p!=d)
 29      {
 30          p++;
 31          int tx = q[p].x;
 32          int ty = q[p].y;
 33          int tnum = q[p].num;
 34          if(s[tx][ty]=='E')
 35          {
 36              pr[5] = tnum;
 37              break;
 38          }
 39          for(i = 0 ; i < 4 ; i++)
 40          {
 41              int nx = tx+dis[i][0];
 42              int ny = ty+dis[i][1];
 43              if(!vis[nx][ny]&&judge(nx,ny))
 44              {
 45                  vis[nx][ny] = 1;
 46                  d++;
 47                  q[d].x = nx;
 48                  q[d].y = ny;
 49                  q[d].num = tnum+1;
 50              }
 51          }
 52      }
 53  }
 54  void dfs(int x,int y,int d,int f)
 55  {
 56      pr[f]++;
 57      if(s[x][y]=='E')
 58          return ;
 59      int i,j,td,tx,ty;
 60      td = dir[f][d][0];
 61      tx = x+dis[td][0];
 62      ty = y+dis[td][1];
 63      if(judge(tx,ty))
 64            dfs(tx,ty,td,f);
 65      else
 66      {
 67          td = dir[f][d][1];
 68          tx = x+dis[td][0];
 69          ty = y+dis[td][1];
 70          if(judge(tx,ty))
 71          dfs(tx,ty,td,f);
 72          else
 73          {
 74              td = dir[f][d][2];
 75              tx = x+dis[td][0];
 76              ty = y+dis[td][1];
 77              if(judge(tx,ty))
 78              dfs(tx,ty,td,f);
 79              else
 80              {
 81                  td = dir[f][d][3];
 82                  tx = x+dis[td][0];
 83                  ty = y+dis[td][1];
 84                  if(judge(tx,ty))
 85                  dfs(tx,ty,td,f);
 86              }
 87          }
 88      }
 89  }
 90  int main()
 91  {
 92      int i,j,k,t,in;
 93      cin>>t;
 94      while(t--)
 95      {
 96          cin>>m>>n;
 97          pr[0] = 0;
 98          pr[1] = 0;
 99          for(i = 1 ; i <= n ; i++)
100          {
101              getchar();
102              for(j = 1 ; j <= m ; j++)
103              {
104                  cin>>s[i][j];
105                  if(s[i][j]=='S')
106                  {
107                      so[0] = i;
108                      so[1] = j;
109                      if(so[0]==n)
110                      in = 0;
111                      if(so[0]==1)
112                      in = 2;
113                      if(so[1]==m)
114                      in = 1;
115                      if(so[1]==1)
116                      in = 3;
117                  }
118              }
119          }
120          bfs();
121          for(i = 0 ; i < 2 ; i++)
122          {
123              memset(vis,0,sizeof(vis));
124              vis[so[0]][so[1]] = 1;
125              dfs(so[0],so[1],in,i);
126          }
127          cout<<pr[0]<<" "<<pr[1]<<" "<<pr[5]<<endl;
128      }
129      return 0;
130  }

转载于:https://www.cnblogs.com/shangyu/archive/2013/01/24/2874121.html

poj3083Children of the Candy Corn(dfs+bfs)相关推荐

  1. 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)

    [题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...

  2. POJ2308连连看dfs+bfs+优化

    DFS+BFS+MAP+剪枝 题意:       就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路:      首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...

  3. 链式前向星模板 建图+dfs+bfs+dijkstra

    边没有用struct封装起来,节点和边的计数起点如果不符合习惯可以稍作修改 建图+DFS+BFS #include <cstdio> #include <cstring> #i ...

  4. 算法 - DFS/BFS

    DFS函数大概率会传递"位置信息",根据位置信息获取下一步的选择,(大部分是在循环中)选择.执行.回退 例如N皇后的 棋盘位置(x, y),组合问题的 idx DFS函数的目的是, ...

  5. [Leetcode][第130题][JAVA][被围绕的区域][DFS][BFS]

    [问题描述][中等] [解答思路] 1. 深度优先搜索 使用深度优先搜索实现标记操作.在下面的代码中,我们把标记过的字母 O 修改为字母 A. 复杂度 class Solution {int[] dx ...

  6. 1.5万字详述 | 全开源:python写小游戏+AI强化学习与传统DFS/BFS控制分别实现

    简介:本周的强化学习我们来到实践部分.我以我在 GitHub 上开源的项目 PiperLiu / Amazing-Brick-DFS-and-DRL 为对象,从零开始与各位朋友分享:如何用 pytho ...

  7. java bfs dfs_java优先搜索(DFS/BFS)实际应用

    深度优先搜索DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.广度优先搜索BFS是Breadth First Sear ...

  8. 洛谷 P1710 地铁涨价 (dfs+bfs)

    地铁涨价 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地铁连接两个不同的站. 地铁计 ...

  9. ROB 第一篇 DFS BFS (寻迹算法)

    ROB 第一篇 DFS & BFS DFS & BFS 简单介绍 原理 DFS BFS 总结 DFS & BFS 简单介绍 DFS (depth first search) 和 ...

  10. 【集训】DFS/BFS专训2

    DFS/BFS专训2 文章目录 DFS/BFS专训2 A. 面积 B. 营救 C. 最少转弯问题 D. 麻将游戏 E. 门票问题 F. 奇怪的电梯(lift) A. 面积 题目描述 编程计算由&quo ...

最新文章

  1. Latex 傻瓜式入门
  2. ios cpu指令架构
  3. 使用axis2进行WebService的开发
  4. Lecture 2 Introduction
  5. php接口返回错误码,laravel 错误处理,接口错误返回json代码
  6. DNN使用非80端口和总是跳转到http://localhost问题的解决
  7. 将DataTable 写入XML
  8. iOS 点击Application icon加载推送通知Data
  9. EmbossMaskFilter BlurMaskFilter 学习
  10. Python之获取中国各地区矢量地图数据(shp格式)
  11. 5G网络的关键技术及特点整理
  12. 英文文献pdf转成中文
  13. linux里的.mht是什么文件,Linux下阅读MHT文件
  14. 【qq音乐歌曲下载转换为mp3格式】
  15. 正则表达式网络三剑客之awk
  16. 事件冒泡 vs 事件捕获 vs 事件委托 的区别
  17. WebGL入门(三十五)-三维物体雾化效果,立方体雾化效果
  18. 基于bs架构的办公自动化系统毕业设计
  19. Matlab从入门到精通(一)
  20. 分页器Pagerhelper

热门文章

  1. 细品慢酌QuickTest关键视图(1)
  2. 【面向对象设计基础】UML统一建模语言初学
  3. 使用windows live writer连接CSDN和博客园博客
  4. iOS 循环引用 委托 (实例说明)
  5. 字符设备驱动笔记——中断方式按键驱动之linux中断处理结构(五)
  6. Microsoft SQL Server 2008 Management Studio Express 下载地址
  7. 导入别的项目到我的eclipse上出现红色感叹号问题
  8. php简单混淆类加密文件如何解密?
  9. 洛谷——P2613 【模板】有理数取余
  10. 论一个蒟蒻的脑子里可以有多少坑(貌似咕了……目前更新保持在noip阶段)