Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
求最短路径的方法!!!最短路径dijkstra算法!!!
class Solution {
public:
int minPathSum(vector<vector<int> > &grid) {
if(grid.size() == 0 || grid[0].size() == 0) return 0;
int dx = grid[0].size();
int dy = grid.size();
vector<vector<int>> distance(dy, vector<int>(dx, INT_MAX));
distance[0][0] = grid[0][0];
queue<pair<int,int>> thequeue;
thequeue.push(make_pair(0,0));
while(!thequeue.empty()) {
pair<int,int> current = thequeue.front();
thequeue.pop();
if(current.first + 1 < dy) {
if(distance[current.first + 1][current.second]
> distance[current.first][current.second] + grid[current.first + 1][current.second]) {
distance[current.first + 1][current.second]
= distance[current.first][current.second] + grid[current.first + 1][current.second];
thequeue.push(make_pair(current.first + 1, current.second));
}
}
if(current.second + 1 < dx) {
if(distance[current.first][current.second + 1]
> distance[current.first][current.second] + grid[current.first][current.second + 1]) {
distance[current.first][current.second + 1]
= distance[current.first][current.second] + grid[current.first][current.second + 1];
thequeue.push(make_pair(current.first, current.second + 1));
}
}
}
return distance[dy - 1][dx - 1];
}
};