zig : update codes style && rust : add codes for chapter_backtracking. (#613)

* zig : update codes style

* rust : add codes for chapter_backtracking

* zig : update codes style
This commit is contained in:
sjinzh
2023-07-16 15:36:28 +08:00
committed by GitHub
parent 51a4c5089e
commit ead33ca863
17 changed files with 312 additions and 71 deletions

View File

@@ -5,7 +5,7 @@
const std = @import("std");
// 最小路径和:暴力搜索
fn min_path_sum_dfs(grid: anytype, i: i32, j: i32) i32 {
fn minPathSumDFS(grid: anytype, i: i32, j: i32) i32 {
// 若为左上角单元格,则终止搜索
if (i == 0 and j == 0) {
return grid[0][0];
@@ -15,14 +15,14 @@ fn min_path_sum_dfs(grid: anytype, i: i32, j: i32) i32 {
return std.math.maxInt(i32);
}
// 计算从左上角到 (i-1, j) 和 (i, j-1) 的最小路径代价
var left = min_path_sum_dfs(grid, i - 1, j);
var up = min_path_sum_dfs(grid, i, j - 1);
var left = minPathSumDFS(grid, i - 1, j);
var up = minPathSumDFS(grid, i, j - 1);
// 返回从左上角到 (i, j) 的最小路径代价
return @min(left, up) + grid[@as(usize, @intCast(i))][@as(usize, @intCast(j))];
}
// 最小路径和:记忆化搜索
fn min_path_sum_dfs_mem(grid: anytype, mem: anytype, i: i32, j: i32) i32 {
fn minPathSumDFSMem(grid: anytype, mem: anytype, i: i32, j: i32) i32 {
// 若为左上角单元格,则终止搜索
if (i == 0 and j == 0) {
return grid[0][0];
@@ -36,8 +36,8 @@ fn min_path_sum_dfs_mem(grid: anytype, mem: anytype, i: i32, j: i32) i32 {
return mem[@as(usize, @intCast(i))][@as(usize, @intCast(j))];
}
// 计算从左上角到 (i-1, j) 和 (i, j-1) 的最小路径代价
var left = min_path_sum_dfs_mem(grid, mem, i - 1, j);
var up = min_path_sum_dfs_mem(grid, mem, i, j - 1);
var left = minPathSumDFSMem(grid, mem, i - 1, j);
var up = minPathSumDFSMem(grid, mem, i, j - 1);
// 返回从左上角到 (i, j) 的最小路径代价
// 记录并返回左上角到 (i, j) 的最小路径代价
mem[@as(usize, @intCast(i))][@as(usize, @intCast(j))] = @min(left, up) + grid[@as(usize, @intCast(i))][@as(usize, @intCast(j))];
@@ -45,7 +45,7 @@ fn min_path_sum_dfs_mem(grid: anytype, mem: anytype, i: i32, j: i32) i32 {
}
// 最小路径和:动态规划
fn min_path_sum_dp(comptime grid: anytype) i32 {
fn minPathSumDP(comptime grid: anytype) i32 {
comptime var n = grid.len;
comptime var m = grid[0].len;
// 初始化 dp 表
@@ -69,7 +69,7 @@ fn min_path_sum_dp(comptime grid: anytype) i32 {
}
// 最小路径和:状态压缩后的动态规划
fn min_path_sum_dp_comp(comptime grid: anytype) i32 {
fn minPathSumDPComp(comptime grid: anytype) i32 {
comptime var n = grid.len;
comptime var m = grid[0].len;
// 初始化 dp 表
@@ -102,20 +102,20 @@ pub fn main() !void {
comptime var m = grid[0].len;
// 暴力搜索
var res = min_path_sum_dfs(&grid, n - 1, m - 1);
var res = minPathSumDFS(&grid, n - 1, m - 1);
std.debug.print("从左上角到右下角的最小路径和为 {}\n", .{res});
// 记忆化搜索
var mem = [_][m]i32{[_]i32{-1} ** m} ** n;
res = min_path_sum_dfs_mem(&grid, &mem, n - 1, m - 1);
res = minPathSumDFSMem(&grid, &mem, n - 1, m - 1);
std.debug.print("从左上角到右下角的最小路径和为 {}\n", .{res});
// 动态规划
res = min_path_sum_dp(&grid);
res = minPathSumDP(&grid);
std.debug.print("从左上角到右下角的最小路径和为 {}\n", .{res});
// 状态压缩后的动态规划
res = min_path_sum_dp_comp(&grid);
res = minPathSumDPComp(&grid);
std.debug.print("从左上角到右下角的最小路径和为 {}\n", .{res});
_ = try std.io.getStdIn().reader().readByte();