阅读量:0
2850. 将石头分散到网格图的最少移动次数
代码如下:
//参考链接:https://leetcode.cn/problems/minimum-moves-to-spread-stones-over-grid/solutions/2435313/tong-yong-zuo-fa-zui-xiao-fei-yong-zui-d-iuw8 class Solution { public: int minimumMoves(vector<vector<int>>& grid) { vector<pair<int,int>> from,to; for(int i=0;i<grid.size();i++) { for(int j=0;j<grid[i].size();j++) { if(grid[i][j]) { for(int k=1;k<grid[i][j];k++) { from.emplace_back(i,j); } } else { to.emplace_back(i,j); } } } int res=INT_MAX; do { int total=0; //枚举 from 的所有排列,与 to 匹配,即累加从 from[i] 到 to[i] 的曼哈顿距离。 for(int i=0;i<from.size();i++) { total+=abs(from[i].first-to[i].first)+abs(from[i].second-to[i].second); } res=min(res,total); }while(next_permutation(from.begin(),from.end()));//next_permutation用于获得下一个排列 return res; } };