BFS(模板)
来源:互联网 发布:如何导入sql数据库 编辑:程序博客网 时间:2024/06/06 04:29
转载请注明出处:http://blog.csdn.net/u012860063
BFS模板题(跳马):
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#include <queue>#define M 1000struct node{int x,y; //点的坐标int step;//记录走到当前点的步数};int xx[8]={-2,-1,1,2,2,1,-1,-2}; //记录走动的八个方向int yy[8]={1,2,2,1,-1,-2,-2,-1};bool visit[M][M];//标记当前点是否访问过int n,ansx,ansy;queue<node>q;int BFS(int x,int y)//广度优先搜索{ if(x==ansx&&y==ansy)//如果起点就是终点,则步数为0 return 0; int dx,dy,i; node front,rear; front.x=x,front.y=y,front.step=0; q.push(front); visit[x][y]=true; while(!q.empty())//判断队列是否为空 { front=q.front();//队首元素出队 q.pop(); for(i=0;i<8;i++) { dx=front.x+xx[i],dy=front.y+yy[i]; if(dx>=0&&dx<n&&dy>=0&&dy<n&&!visit[dx][dy])//判断是否在图中且有无访问过 { visit[dx][dy]=true;//标记当前点已访问过 if(dx==ansx&&dy==ansy)//判断当前点是否为终点 return front.step+1; rear.x=dx,rear.y=dy,rear.step=front.step+1;//步数为父节点(起始点)步数加1 q.push(rear); } } }}int main(){ int t,i,x,y,ans; scanf("%d",&t); while(t--) { while(!q.empty())//清空队列 q.pop(); memset(visit,false,sizeof(visit));//初始化为全都还没访问过 scanf("%d",&n); //图的大小,图n*n的矩阵 scanf("%d%d",&x,&y);//起点 scanf("%d%d",&ansx,&ansy);//终点 ans=BFS(x,y);//返回最小步数 printf("%d\n",ans); } return 0;}
1 0
- BFS(模板)
- BFS入门(伪模板)
- Knight Moves(BFS模板)
- 【模板】BFS
- bfs模板
- BFS模板
- 模板,BFS
- BFS模板
- BFS 模板
- BFS模板
- bfs模板
- bfs模板
- BFS 模板
- BFS模板
- BFS模板
- bfs模板
- bfs模板
- bfs模板
- nefu 628 Garden visiting
- 每天一个C++小程序(十五)--快速排序
- 关于抱怨解读,读书笔记
- 第九周项目一
- 杭电1856More is better(并查集)
- BFS(模板)
- C++:private继承与public继承
- C++ struct与class的区别
- java停止线程 interrupt 和守护线程setDaemon
- Java Card CAP 文件组件分析 09—— Reference Location Component
- ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.6
- ACM-尼姆博弈之John——hdu1907
- [SPOJ FASTFLOW] Fast Maximum Flow [最大流]
- Linux服务器程序性能测试的一些思考