题目链接:http://poj.org/problem?id=2935
解题报告:刷到bfs明显的感觉有些难,这道题应该卡的有3~4天了吧!
首先说明一下bfs如何记录路径:在结构体中,用一个值来记录上一个的位置,然后再“回溯”(并不是真的回溯)到第一个元素,然后递归输出即可;
第二点:交换两个数的位运算方法:a^=b^=a^=b,看上去显得代码更有技术含量
第三点:注意输入值的顺序,我就在这卡了n久
#include<cstdio> #include<cstring> #include<queue> #define swap(a,b) a^=b^=a^=b using namespace std; const int maxn = 15; const int dir[4][2]={0,2,2,0,0,-2,-2,0}; const char ch[4]={'E','S','W','N'}; struct node { int x,y; int pre; char c; }q[maxn*maxn]; int sx,sy,ex,ey,num; int mp[maxn][maxn]; bool iswall( int x,int y,int i) { if ( i==0 && mp[x][y-1] ) return true; else if(i==1&&mp[x-1][y]) return true; else if(i==2&&mp[x][y+1]) return true; else if(i==3&&mp[x+1][y]) return true; else return false; } void print(int x) { if(x) { print(q[x].pre ); printf("%c",q[x].c); } } void bfs( ) { int front = 0, rear = 0; node frm = {sx,sy,0,0}; q[rear++] = frm; while(front < rear) { frm = q[front]; for( int i=0;i<4;i++) { node to = {frm.x+dir[i][0],frm.y+dir[i][1],front,ch[i]}; if(to.x < 2||to.x >12||to.y <2||to.y > 12) continue; if(!mp[to.x][to.y]&&!iswall(to.x,to.y,i)) { mp[to.x][to.y] = 1; q[rear] = to; if(to.x==ex&&to.y==ey) { print( rear );//printf("\nrear = %d front = %d",rear,front); return ; } ++rear; } } ++front; } } int main() { int a1,a2,b1,b2; while(scanf("%d%d",&sy,&sx)&&(sx||sy)) { scanf("%d%d",&ey,&ex); memset(mp,0,sizeof(mp)); ex = 2*ex;ey = 2*ey; sx = 2*sx;sy = 2*sy; mp[sx][sy] = 1; for(int i=0;i<3;i++) { scanf("%d%d%d%d",&b1,&a1,&b2,&a2); if( a1 == a2 ) { if(b1>b2) swap(b1,b2); for(int j=b1;j<b2;j++) mp[a1*2+1][j*2+2]=1; } else { if(a1>a2) swap(a1,a2); for(int j=a1;j<a2;j++) mp[2*j+2][b1*2+1]=1; } } if( sx==ex && sy ==ey ) { puts(""); continue; } bfs(); printf("\n"); } return 0; }
相关推荐
【标题】"POJ1426-Find The Multiple【BFS+同余模】"是一道来源于北京大学在线编程平台POJ的算法题目,主要涉及到了广度优先搜索(BFS)与同余模运算的知识点。这道题目要求解决的是寻找一个整数的倍数问题,可能...
《POJ3026-Borg Maze:BFS与Prim算法的应用解析》 在计算机科学领域,图论是解决问题的重要工具之一,而BFS(广度优先搜索)和Prim算法则是其中的两种经典算法。本篇文章将围绕北大POJ3026题目“Borg Maze”来探讨...
标题中的“NOI2002.rar_NOI 2002 dragon_poj bfs”提到了几个关键元素:NOI(全国青少年信息学奥林匹克),2002年赛事,dragon问题,以及poj_bfs。这表明我们即将讨论的是2002年全国青少年信息学奥林匹克竞赛中的...
两个解决方案的代码文件“POJ1753-Flip Game(BFS+bit).cpp”和“POJ1753-Flip Game(DFS+enum).cpp”分别实现了BFS和DFS策略。阅读这些代码可以帮助理解如何将理论转换为实际的程序实现。 五、文档说明 “POJ1753-...
2. "POJ3436-ACM Computer Factory【BFS+压入重标法+模拟拆点】(不知道错哪里了).cpp":这里尝试结合BFS和压入重标法,并模拟拆点,但作者不确定代码中是否存在错误,可能需要进一步调试。 3. "POJ3436-ACM Computer...
双向BFS是一种优化的搜索策略,它同时从初始状态和目标状态开始搜索,一旦两个搜索路径在中间某个节点相遇,就能找到最短路径。 八数码问题的解题核心在于搜索算法,常见的有深度优先搜索(DFS)、宽度优先搜索...
包括深度优先遍历(DFS)和广度优先遍历(BFS),用于探索图的所有节点,是解决许多图问题的基础,如poj1860和poj3259所示。 #### 最短路径算法 Dijkstra算法、Bellman-Ford算法和Floyd算法分别适用于无负权边、有...
【标签】"POJ 3126 Prime Path" 指明了问题的关键元素:POJ是一个在线编程平台,3126是这道题目的编号,Prime Path则揭示了问题的核心,即寻找素数路径。 【详细说明】在解决"Prime Path"这个问题时,我们需要掌握...
在POJ题目中,BFS常用于最短路径问题、最近公共祖先查询等。比如求解两节点间的最短路径,如果边的权重都为1,BFS将给出答案。 3. **Dijkstra算法**:这是解决单源最短路径问题的经典算法,适用于有向图或无向图,...
- "POJ1459-Power Network【BFS+压入重标法】.cpp":这是解题的C++源代码文件,采用了BFS和压入重标法进行编程实现。代码中可能包括了图的表示(如邻接矩阵或邻接表),BFS的遍历过程,以及如何利用压入重标法进行...
4. **深度优先搜索(DFS)** 和 **广度优先搜索(BFS)**:这两种遍历方法是图算法的基础,常用于寻找路径、判断连通性、检测环路等。DFS通过递归或栈实现,而BFS使用队列进行。 5. **二分图匹配**:匈牙利算法或...
2. **图的遍历**:DFS和BFS是解决图问题的常用方法,它们可以用来寻找特定路径或计算节点之间的最短路径。 3. **网络破坏策略**:题目可能要求玩家找出最小数量的节点,破坏这些节点将导致整个网络崩溃。这需要对图...
- POJ 2292 - Wormholes(图论中的最短路径问题) - POJ 2349 - Cows(贪心算法) **相关知识点**: - DFS和BFS的实现原理 - 贪心算法的选择原则 - 回溯算法在组合优化问题中的应用 - A*算法及其改进策略 ##### 4....
- (poj1328, poj2109, poj2586):介绍各种搜索算法,如深度优先搜索(DFS)、广度优先搜索(BFS)等。 3. **排序与查找**: - 提供对排序和查找算法的理解与应用指导,包括快速排序、归并排序、二分查找等经典...
优化策略可能包括快速判断线段相交的方法,如Sweep Line算法或Segment Tree,以及并查集的路径压缩和按秩合并优化。 总结来说,"POJ1011 - Sticks"是一个锻炼程序员几何理解、图论应用和算法实现能力的好题目。它...
如poj3278、poj2049、poj3083是图遍历的例子,poj1860、poj3259等则是最短路径问题,poj1789、poj2485等则涉及最小生成树。 3. **数据结构**:包括串、排序、简单并查集、哈希表、二分查找、哈夫曼树和堆。poj1035、...
例如,题目poj1860和poj3259就是典型的最短路径问题。 ### 3. 数据结构 数据结构部分包括数组、链表、栈、队列、树、堆、哈希表等,它们在存储和访问数据时提供不同的效率和特性。哈希表(Hash)是一种高效的数据...
POJ1039-Pipe可能需要应用到的算法包括但不限于深度优先搜索(DFS)、广度优先搜索(BFS)、动态规划、贪心算法或图的遍历算法。 4. **图论**:由于题目名为"Pipe",很可能涉及到图的结构,比如管道之间的连接可以...
### POJ 3083 Children of the Candy Corn 解题报告 #### Description 题目描述了一个典型的迷宫问题:在一个玉米地迷宫中,游客需要找到从入口到出口的路径。题目给出了一个常见的策略:选择左墙或右墙并沿着它...
5. **PKU 1010 搜索.txt**:搜索问题通常包括深度优先搜索(DFS)、广度优先搜索(BFS)或A*搜索算法。可能需要解决路径查找、迷宫求解等问题。 6. **POJ 3468 线段树--long long VS int.txt**:线段树是处理区间...