宽搜模版
来源:互联网 发布:汇编语言用什么软件 编辑:程序博客网 时间:2024/06/05 08:26
#include<bits/stdc++.h>
using namespace std;
struct s //结构体用来表示坐标
{
int x;
int y;
};
queue<s> q; //队列用来行走
int d[1999][1999]; //记录步数
bool v[1999][1999]; //标记是否走过
char Map[199][199]; //地图
int N, M, s1, s2, e1, e2; //地图的长,宽,起点坐标&&终点坐标
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1}; //用来上下左右查找
void vis() //初始化
{
memset(d, 0, sizeof(d));
memset(v, false, sizeof(v));
}
int panduan(int x, int y)
{
if(x >= 0 && x < M && y >= 0 && y < N && !v[x][y] && Map[x][y] == '.') //判断是否越界以及这个坐标是否走过了以及这个坐标是否能走(假设点是路)
return 1;
else
return 0;
}
int bfs()
{
s a;
a.x = s1;
a.y = s2;
q.push(a);
while(!q.empty())
{
q.pop();
a = q.front();
v[a.x][a.y] = 1; //记录 表示这个坐标已经走过了
if(a.x == e1 && a.y == e2)
return d[e1][e2];
for(int i = 0; i < 4; i++) //用来上下左右四个方向查找
{
s n;
n.x = a.x + dx[i];
n.y = a.y + dy[i];
if(panduan(n.x, n.y))
{
d[n.x][n.y] = d[a.x][a.y] + 1; //步数在原来的基础上加一
v[n.x][n.y] = 1; //标记 证明这个坐标走过了
q.push(n); //把这个点压入队列
}
}
}
}
int main()
{
// 输入地图的厂,宽,起点坐标和终点坐标
vis();
cout << bfs() << endl;
return 0;
}
using namespace std;
struct s //结构体用来表示坐标
{
int x;
int y;
};
queue<s> q; //队列用来行走
int d[1999][1999]; //记录步数
bool v[1999][1999]; //标记是否走过
char Map[199][199]; //地图
int N, M, s1, s2, e1, e2; //地图的长,宽,起点坐标&&终点坐标
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1}; //用来上下左右查找
void vis() //初始化
{
memset(d, 0, sizeof(d));
memset(v, false, sizeof(v));
}
int panduan(int x, int y)
{
if(x >= 0 && x < M && y >= 0 && y < N && !v[x][y] && Map[x][y] == '.') //判断是否越界以及这个坐标是否走过了以及这个坐标是否能走(假设点是路)
return 1;
else
return 0;
}
int bfs()
{
s a;
a.x = s1;
a.y = s2;
q.push(a);
while(!q.empty())
{
q.pop();
a = q.front();
v[a.x][a.y] = 1; //记录 表示这个坐标已经走过了
if(a.x == e1 && a.y == e2)
return d[e1][e2];
for(int i = 0; i < 4; i++) //用来上下左右四个方向查找
{
s n;
n.x = a.x + dx[i];
n.y = a.y + dy[i];
if(panduan(n.x, n.y))
{
d[n.x][n.y] = d[a.x][a.y] + 1; //步数在原来的基础上加一
v[n.x][n.y] = 1; //标记 证明这个坐标走过了
q.push(n); //把这个点压入队列
}
}
}
}
int main()
{
// 输入地图的厂,宽,起点坐标和终点坐标
vis();
cout << bfs() << endl;
return 0;
}
阅读全文
0 0
- 宽搜模版
- 广搜模版
- 广搜模版BFS
- 模版
- 模版
- 模版
- 模版
- 模版
- 模版
- 模版
- 模版
- 模版
- 模版
- 模版
- 模版
- 双向广搜模版(360百科)
- Dinic模版+SAP模版
- bign模版高精度模版
- port-security 交换安全技术
- Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸
- 超越对手的网站定位和用户体验的思维
- 在gridview中完全实现某一列的隐藏并取值
- _mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h':问题的解决
- 宽搜模版
- 4个数和为0
- Android_MVP之错误异常信息收集处理 CrashHandler
- I2S和PCM
- mysql 小技巧
- python爬虫-多进程
- java两种方式实现死锁
- Solr-6.5.1从mysql数据库全量导入数据
- 自定义圆形、半圆形ProgressBar