mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-05 11:41:22 +08:00
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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user