记录备战第十六届蓝桥杯的过程
1.学会了原来字符串也有比较方法,也就是字符串987 > 98 等等,可以解决拼最大数问题
题目链接:5.拼数 - 蓝桥云课 (lanqiao.cn)
2.今天又复习了一下bfs,感觉还是很不熟练,可能是那个过程我些许有点不熟悉,准备再看看bfs然后自己总结一下。
bfs做题步骤
1,定义好结构体,数组,标记数组
2,定义好方向数组
3,定义好出发点和结束点
4,在用结构体定义好起始点给队列,起始点的标记数组设置为1。
5,while循环,条件是队列不能为空
6,里面先写结束条件,结束条件就是当前走的点走到了结束点
7,然后for循环方向数组,重新定义当前的x,y,step,让step + 1。让当前的x,y的标记数组变成1。
8,然后弹出来。
标准的bfs模板代码如下
# include <iostream>
# include <queue>
using namespace std;
int a[110][110];
bool vis[110][110];
struct Type{
int x;
int y;
int step;
};
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, -1, 0, 1};
int main()
{
int n, m, x1, x2, y1, y2;
queue<Type> q1;
cin>>n>>m;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
cin>>a[i][j];
}
}
cin>>x1>>y1>>x2>>y2;
Type start;
start.x = x1;
start.y = y1;
start.step = 0;
q1.push(start);
vis[x1][x2] = 1;
int flag = 0;
while(!q1.empty())
{
int x = q1.front().x, y = q1.front().y;
if(x == x2 && y == y2)
{
flag = 1;
cout<<q1.front().step<<endl;
break;
}
for(int k = 0; k < 4; k++)
{
int tx, ty;
tx = q1.front().x + dx[k];
ty = q1.front().y + dy[k];
if(a[tx][ty] == 1 && vis[tx][ty] == 0)
{
Type temp;
temp.x = tx;
temp.y = ty;
temp.step = q1.front().step + 1;
q1.push(temp);
vis[tx][ty] = 1;
}
}
q1.pop();
}
if(flag == 0)
{
cout<<-1<<endl;
}
return 0;
}
题目链接:7.走迷宫 - 蓝桥云课 (lanqiao.cn)