有一个矩阵map,它每个格子有一个权值。从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。 给定一个矩阵map及它的行数n和列数m
#include <algorithm> #include <iostream> using namespace std; #include <vector> int MinimumPath(int n, int m){ vector<vector<int>> a(n, vector<int>(m)); vector<vector<int>> b(n+1, vector<int>(m+1)); //初始化各个位置的值 for (int i = 0; i < n; i++){ for (int j = 0; j < m; j++){ if (i == 0 && j == 0){ a[i][j] = 1; } else if (j == 0){ a[i][j] = a[i - 1][m - 1] + 1; } else{ a[i][j] = a[i][j-1] + 1; } cout << a[i][j] << " "; } cout << endl; } // 每一个位置的值 都等于它前一个位置+要到达的位置。 for (int i = 0; i < n; i++){ for (int j = 0; j < m; j++){ if (i == 0 && j == 0){ b[i+1][j+1] = a[i][j]; } else{ b[i+1][j+1] = min(b[i + 1][j] + a[i][j], b[i][j + 1] + a[i][j]); } } } return b[n][m]; } int main(void) { cout << MinimumPath(10, 10) << endl;; }