poj3083Children of the Candy Corn(dfs+bfs)
http://poj.org/problem?id=3083纠结了好久 被它的转向搞晕 了
WA两次 加一else AC。。
设置四个方向 初始化方向自己算出来 初始化在数组中 dfs+bfs
左 就是当前方向向左 左走不动就逆时针走下一个方向 依次类推 右同样的方式
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)相关推荐
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
[题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...
- POJ2308连连看dfs+bfs+优化
DFS+BFS+MAP+剪枝 题意: 就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路: 首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...
- 链式前向星模板 建图+dfs+bfs+dijkstra
边没有用struct封装起来,节点和边的计数起点如果不符合习惯可以稍作修改 建图+DFS+BFS #include <cstdio> #include <cstring> #i ...
- 算法 - DFS/BFS
DFS函数大概率会传递"位置信息",根据位置信息获取下一步的选择,(大部分是在循环中)选择.执行.回退 例如N皇后的 棋盘位置(x, y),组合问题的 idx DFS函数的目的是, ...
- [Leetcode][第130题][JAVA][被围绕的区域][DFS][BFS]
[问题描述][中等] [解答思路] 1. 深度优先搜索 使用深度优先搜索实现标记操作.在下面的代码中,我们把标记过的字母 O 修改为字母 A. 复杂度 class Solution {int[] dx ...
- 1.5万字详述 | 全开源:python写小游戏+AI强化学习与传统DFS/BFS控制分别实现
简介:本周的强化学习我们来到实践部分.我以我在 GitHub 上开源的项目 PiperLiu / Amazing-Brick-DFS-and-DRL 为对象,从零开始与各位朋友分享:如何用 pytho ...
- java bfs dfs_java优先搜索(DFS/BFS)实际应用
深度优先搜索DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.广度优先搜索BFS是Breadth First Sear ...
- 洛谷 P1710 地铁涨价 (dfs+bfs)
地铁涨价 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地铁连接两个不同的站. 地铁计 ...
- ROB 第一篇 DFS BFS (寻迹算法)
ROB 第一篇 DFS & BFS DFS & BFS 简单介绍 原理 DFS BFS 总结 DFS & BFS 简单介绍 DFS (depth first search) 和 ...
- 【集训】DFS/BFS专训2
DFS/BFS专训2 文章目录 DFS/BFS专训2 A. 面积 B. 营救 C. 最少转弯问题 D. 麻将游戏 E. 门票问题 F. 奇怪的电梯(lift) A. 面积 题目描述 编程计算由&quo ...
最新文章
- Latex 傻瓜式入门
- ios cpu指令架构
- 使用axis2进行WebService的开发
- Lecture 2 Introduction
- php接口返回错误码,laravel 错误处理,接口错误返回json代码
- DNN使用非80端口和总是跳转到http://localhost问题的解决
- 将DataTable 写入XML
- iOS 点击Application icon加载推送通知Data
- EmbossMaskFilter BlurMaskFilter 学习
- Python之获取中国各地区矢量地图数据(shp格式)
- 5G网络的关键技术及特点整理
- 英文文献pdf转成中文
- linux里的.mht是什么文件,Linux下阅读MHT文件
- 【qq音乐歌曲下载转换为mp3格式】
- 正则表达式网络三剑客之awk
- 事件冒泡 vs 事件捕获 vs 事件委托 的区别
- WebGL入门(三十五)-三维物体雾化效果,立方体雾化效果
- 基于bs架构的办公自动化系统毕业设计
- Matlab从入门到精通(一)
- 分页器Pagerhelper