c++算法学习笔记 (7) BFS

1.走迷宫

#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
typedef pair<int, int> PII;
const int N = 105;
int n, m;
int g[N][N]; // 存图
int d[N][N]; // 每个点到起点的距离
queue<PII> q[N * N];

int bfs()
{
    q->push(make_pair(0, 0));
    memset(d, -1, sizeof d);
    d[0][0] = 0;
    int dx[4] = {-1, 0, 1, 0};
    int dy[4] = {0, 1, 0, -1};
    while (!q->empty())
    {
        PII t = q->front(); // 取队头
        q->pop();
        for (int i = 0; i < 4; i++)
        {
            int x = t.first + dx[i], y = t.second + dy[i];
            if (x >= 0 && x < n && y >= 0 && y < m && g[x][y] == 0 && d[x][y] == -1)
            {                                       // 在范围内且“第一次搜到”
                d[x][y] = d[t.first][t.second] + 1; // 距离+1
                q->push(make_pair(x, y));
            }
        }
    }
    return d[n - 1][m - 1]; // 右下角的距离
}
int main()
{
    cin >> n >> m;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> g[i][j];
        }
    }
    cout << bfs() << endl;
    return 0;
}

2.八数码

在一个 3×3 的网格中,1∼8 这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3 的网格中。

例如:

1 2 3
x 4 6
7 5 8

在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。

我们的目的是通过交换,使得网格变为如下排列(称为正确排列):

1 2 3
4 5 6
7 8 x

例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到正确排列。

交换过程如下:

1 2 3   1 2 3   1 2 3   1 2 3
x 4 6   4 x 6   4 5 6   4 5 6
7 5 8   7 5 8   7 x 8   7 8 x

现在,给你一个初始网格,请你求出得到正确排列至少需要进行多少次交换。

输入格式

输入占一行,将 3×3 的初始网格描绘出来。

例如,如果初始网格如下所示:

1 2 3 
x 4 6 
7 5 8 

则输入为:1 2 3 x 4 6 7 5 8

输出格式

输出占一行,包含一个整数,表示最少交换次数。

如果不存在解决方案,则输出 −1。

输入样例:
2 3 4 1 5 x 7 6 8
输出样例
19

相关推荐

  1. c++算法学习笔记 (7) BFS

    2024-03-17 14:38:03       19 阅读
  2. BFS 解决 FloodFill 算法(C++)

    2024-03-17 14:38:03       11 阅读
  3. 基础算法学习笔记C++)

    2024-03-17 14:38:03       51 阅读
  4. C语言学习笔记day7

    2024-03-17 14:38:03       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-17 14:38:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-17 14:38:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-17 14:38:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-17 14:38:03       20 阅读

热门阅读

  1. redis配置文件详情

    2024-03-17 14:38:03       21 阅读
  2. Lambda表达式

    2024-03-17 14:38:03       15 阅读
  3. CSS中px、em、rem的区别及使用场景

    2024-03-17 14:38:03       20 阅读
  4. CSS 面试题及答案

    2024-03-17 14:38:03       17 阅读
  5. 安卓UI面试题 56-60

    2024-03-17 14:38:03       24 阅读
  6. Android启动优化

    2024-03-17 14:38:03       20 阅读
  7. 蓝桥杯构造法|两道例题(C++)

    2024-03-17 14:38:03       18 阅读
  8. 《工厂模式(极简c++)》

    2024-03-17 14:38:03       21 阅读