bfs模板
来源:互联网 发布:网络司法拍卖变卖 编辑:程序博客网 时间:2024/06/04 19:53
/*
bfs:(从起始点开始搜索,提前添加进队列中)
while->队列不为空
从队列头导入点
for->行走的各种方式
满足判断(没越界、没走过等等)->添加进队列中->利用其他数组设定这个点的父点,表示这个点是由父点搜索来的
直到找到终点结束
*/
/*
当找到终点时,可以从终点开始,利用父点记录往上找到路径,保存在栈里,最后输出栈就是路径了
*/
#include<iostream>
#include<stack>#include<queue>
using namespace std;
struct point
{
int x,y;
};
int map[5][5];
stack<point>S;
point father[5][5];
int state[5][5];
int dis[4][2]={0,1,0,-1,1,0,-1,0};
bool InMap(point m)
{
if(m.x>=0&&m.x<5&&m.y>=0&&m.y<5) return true;
else return false;
}
void IsOk(point m)
{
S.push(m);
if(m.x!=0||m.y!=0)
{
point M;
M.x=father[m.x][m.y].x;
M.y=father[m.x][m.y].y;
IsOk(M);
}
}
void bfs()
{
queue<point>Q;
point m;
int i;
m.x=0;
m.y=0;
state[0][0]=1;
Q.push(m);
while(!Q.empty())
{
m=Q.front();
Q.pop();
for(i=0;i<4;i++)
{
m.x+=dis[i][0];
m.y+=dis[i][1];
if(InMap(m)==true&&state[m.x][m.y]==0&&map[m.x][m.y]==0)
{
father[m.x][m.y].x=m.x-dis[i][0];
father[m.x][m.y].y=m.y-dis[i][1];
if(m.x==4&&m.y==4)
{
IsOk(m);
return ;
}
Q.push(m);
state[m.x][m.y]=1;
}
m.x-=dis[i][0];
m.y-=dis[i][1];
}
}
}
int main()
{
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
cin>>map[i][j];
state[i][j]=0;
father[i][j].x=i;
father[i][j].y=j;
}
}
bfs();
while(!S.empty())
{
cout<<"("<<S.top().x<<", "<<S.top().y<<")"<<endl;
S.pop();
}
return 0;
}
- 【模板】BFS
- bfs模板
- BFS模板
- 模板,BFS
- BFS模板
- BFS 模板
- BFS模板
- bfs模板
- bfs模板
- BFS 模板
- BFS模板
- BFS模板
- bfs模板
- bfs模板
- bfs模板
- BFS模板
- BFS 模板
- bfs模板
- Linux中syslog日志函数扫盲式实例解析
- libxml2使用详解
- 串口
- python 内存管理
- 线程调度
- bfs模板
- Flex load Image from Network
- winform实现让程序只能打开一个实例(总结3方法)
- navigationController push和pop界面切换动画
- oracle 基础学习04 -----游标 包
- MYSQL OPEN_FILES_LIMIT相关设置
- Hadoop In Action笔记(逐渐更新)
- android/linux usb 摄像头获取一张图像
- c#代码规范