洛谷P1443 马的遍历

这篇博客介绍了如何使用C语言和Python实现广度优先搜索(BFS)。C语言版本中,自定义了队列结构,并展示了左对齐、右对齐的输出格式。Python版本则使用了内置的队列模块,同时提供了左对齐、居中、右对齐的字符串格式化输出。两个版本都用于解决最短路径问题,并给出了完整的代码实现。

https://www.luogu.com.cn/problem/P1443

C语言:

队列要自己写:

对齐:

printf("%-5d", -1);//左对齐
printf("%5d", -1);//右对齐

代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int x, y;
}Node;

typedef Node Qelemtype;

typedef struct
{
    Qelemtype *base;
    int front;
    int rear;
}squeue;

const int MaxValue = 0x7fffffff, MaxSize = 160005;
int n, m;
int f[405][405], vis[405][405];
int fx[8][2]={{2, 1}, {2, -1}, {1, 2}, {1, -2}, {-1, 2}, {-1, -2}, {-2, 1}, {-2, -1}};
squeue q;

void InitQueue()
{
    q.base = (Qelemtype *)malloc(MaxSize * sizeof(Qelemtype));
    if (!q.base)
        exit(-1);
    q.front = 0;
    q.rear = 0;
}

void PushQueue(Qelemtype x)
{
    if (((q.rear + 1)%MaxSize) == q.front)
    {
        printf("¶ÓÂú\n");
        exit(-1);
    }
    q.base[q.rear] = x;
    q.rear = (q.rear + 1) % MaxSize;
}

Qelemtype PopQueue()
{
    Qelemtype x;

    if (q.front == q.rear)
    {
        printf("¶Ó¿Õ\n");
        exit(-1);
    }
    x = q.base[q.front];
    q.front = (q.front + 1) % MaxSize;
    return x;
}

int EmptyQueue()
{
    if (q.rear == q.front)
        return 1;
    else
        return 0;
}

void bfs(int x, int y)
{
    int i, x1, y1;
    Node n1, n2;

    while(!EmptyQueue())
    {
        n1 = PopQueue();
        vis[n1.x][n1.y] = 0;

        for (i = 0; i<8; i++)
        {
            x1 = n1.x + fx[i][0];
            y1 = n1.y + fx[i][1];
            if (x1 > n || x1 <= 0 || y1 > m || y1 <= 0)
                continue;
            if (f[x1][y1] > f[n1.x][n1.y] + 1 && vis[x1][y1] == 0)
            {
                n2.x = x1;  n2.y = y1;
                f[x1][y1] = f[n1.x][n1.y] + 1;
                PushQueue(n2);
                vis[x1][y1] = 1;
            }
        }
    }

    return ;
}

int main()
{
    int i, x, y, j;
    Node n1;

    scanf("%d%d%d%d", &n, &m, &x, &y);

    for (i = 1; i <= n; i++)
        for (j = 1; j <= m; j++)
            f[i][j] = MaxValue;
    memset(vis, 0, sizeof(vis));
    InitQueue();
    f[x][y] = 0;
    n1.x = x;   n1.y = y;
    PushQueue(n1);
    vis[x][y] = 1;

    bfs(x, y);

    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= m; j++)
        {
            if (f[i][j] == MaxValue)
                printf("%-5d", -1);
            else
                printf("%-5d", f[i][j]);
        }
        printf("\n");
    }

    return 0;
}

 

python:

输入对齐:

print("|",format("Ursula","*>20"),"|")    #左对齐
print("|",format("Ursula","*^20"),"|")   #居中对齐
print("|",format("Ursula","*<20"),"|")    #右对齐

全局变量:

只用在函数中加global即可

def f():
    global x, y...

代码:

import queue

class Node(object):
    def __init__(self):
        self.x = None
        self.y = None

def bfs():
    global f, fx, q, vis, n, m
    while not q.empty():
        n1 = q.get()
        vis[n1.x][n1.y] = 0
        for i in range(8):
            x1 = n1.x + fx[i][0]
            y1 = n1.y + fx[i][1]
            if x1 <= 0 or x1 > n or y1 <= 0 or y1 >m:
                continue
            if f[x1][y1] > f[n1.x][n1.y] + 1 and vis[x1][y1]==0:
                f[x1][y1] = f[n1.x][n1.y] + 1
                n2 = Node()
                n2.x = x1
                n2.y = y1
                q.put(n2)
                vis[x1][y1] = 1


s = input()
n0, m0, x0, y0 = s.split(' ')
n = eval(n0)
m = eval(m0)
x = eval(x0)
y = eval(y0)

MaxValue = 0x7fffffff
f = [[MaxValue for i in range(m + 5)] for j in range(n + 5)]
vis = [[0 for i in range(m + 5)] for j in range(n + 5)]
q = queue.Queue(n * m + 5)
fx = [[2, 1], [2, -1], [1, 2], [1, -2], [-1, 2], [-1, -2], [-2, 1], [-2, -1]]

vis[x][y] = 1
f[x][y] = 0
n1 = Node()
n1.x = x
n1.y = y
q.put(n1)
bfs()
for i in range(1, n+1):
    for j in range(1, m+1):
        if f[i][j] == MaxValue:
            print(format(-1, " <5"), end='')
        else:
            print(format(f[i][j], " <5"), end='')
    print(end='\n')

 

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值