MATLAB 代码修复:计算路径上的点数和数据之和
非常抱歉之前的修复仍然有误。在计算路径时,判断是否到达起点的条件有误。请使用以下修正后的代码:
% 读取Excel表格数据
data = xlsread('your_file.xlsx', 'Sheet1'); % 假设数据在第一个sheet中
% 定义起点和终点坐标
start_point = [91, 20];
end_point = [80, 140];
% 定义矩阵大小
matrix_size = size(data);
% 创建矩阵用于存储每个点的累计数据之和
sum_matrix = zeros(matrix_size);
% 创建矩阵用于存储路径上的点数
count_matrix = inf(matrix_size);
count_matrix(start_point(1), start_point(2)) = 0;
% 计算累计数据之和和途径的点数
for i = 1:matrix_size(1)
for j = 1:matrix_size(2)
if i == 1 && j == 1
sum_matrix(i, j) = data(i, j);
continue; % 跳过起始点
end
% 计算上方和左方的路径
if i > 1 && j > 1
[max_val, min_count] = max([sum_matrix(i-1, j), sum_matrix(i, j-1)]);
elseif i > 1
max_val = sum_matrix(i-1, j);
min_count = count_matrix(i-1, j);
elseif j > 1
max_val = sum_matrix(i, j-1);
min_count = count_matrix(i, j-1);
end
sum_matrix(i, j) = max_val + data(i, j);
count_matrix(i, j) = min_count + 1;
end
end
% 输出路径上的点数和数据之和
disp(['路径上的点数:', num2str(count_matrix(end_point(1), end_point(2)))]);
disp(['路径上的数据之和:', num2str(sum_matrix(end_point(1), end_point(2)))]);
% 获取路径上的点的坐标
path = [end_point];
current_row = end_point(1);
current_col = end_point(2);
while true
if current_row == start_point(1) && current_col == start_point(2)
path = [start_point; path];
break;
end
if current_row > 1 && current_col > 1
if sum_matrix(current_row-1, current_col) >= sum_matrix(current_row, current_col-1)
current_row = current_row - 1;
else
current_col = current_col - 1;
end
elseif current_row > 1
current_row = current_row - 1;
elseif current_col > 1
current_col = current_col - 1;
end
path = [current_row, current_col; path];
end
% 调整路径的坐标为实际坐标
path = path + repmat(start_point - [1, 1], size(path, 1), 1);
% 输出途径的点的坐标
disp('途径的点的坐标:');
disp(path);
在这个修正后的代码中,我们更新了判断到达起点的条件,以确保正确计算路径上的点数和数据之和,并获取途径的点的坐标。
再次非常抱歉之前的错误并给您带来困扰。希望这次修正的代码能够解决您的问题。如果还有其他问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/PaG 著作权归作者所有。请勿转载和采集!