外贸网站做哪些语言,家居网站建设总结,广州外贸公司,vue开发wordpress一、题目 二、解题思路 1、分割后放进二维数组 2、使用map#xff0c;key为数值#xff0c;value为其坐标 3、遍历二维数组元素#xff0c;再在map中找该元素对应的value值#xff08;二维数组形式#xff09;#xff0c;倘若value.size为1#xff0c;那直接返回-1…一、题目 二、解题思路 1、分割后放进二维数组 2、使用mapkey为数值value为其坐标 3、遍历二维数组元素再在map中找该元素对应的value值二维数组形式倘若value.size为1那直接返回-1否则继续遍历value二维数组将值减去当前ij坐标后不断比较取出最小值放进数组放进的位置正好就是该元素对应的ij位置 三、代码
#includeiostream
#includevector
#includestring
#includemap
#includealgorithmusing namespace std;vectorintsplit(string params) {vectorintp;while (params.find( ) ! string::npos) {int found params.find( );p.push_back(stoi(params.substr(0, found)));params params.substr(found 1);}p.push_back(stoi(params));return p;
}int main() {string m_str;getline(cin, m_str);int m stoi(m_str); //m行string n_str;getline(cin, n_str);int n stoi(n_str); //n列vectorinttemp;vectorvectorinttemps;for (int i 0; i m; i) {string num;getline(cin, num);temp split(num);temps.push_back(temp);temp.clear();}//key为数值value为该值的坐标mapint, vectorvectorintnum_map;for (int i 0; i m; i) {for (int j 0; j n; j) {vectorintsit;sit.push_back(i);sit.push_back(j);num_map[temps[i][j]].push_back(sit);sit.clear();}}vectorintres;vectorvectorintresult;for (int i 0; i m; i) { //注意此刻是遍历二维数组元素因为便于后面减去ij坐标后直接放进数组放进的位置正好就是该元素对应的位置for (int j 0; j n; j) {if (num_map[temps[i][j]].size() 1) { //依次遍历二维数组key如果其对应的value仅有一个元素返回-1res.push_back(-1);}else {int min_distance INT_MAX; //不确定最小值比多少少这里就先给一个最大值最小值的写法INT_MINfor (int k 0; k num_map[temps[i][j]].size(); k) {int distance abs(num_map[temps[i][j]][k][0] - i) abs(num_map[temps[i][j]][k][1] - j); //当前元素坐标就为ij所以直接遍历坐标相减即可if (distance 0) { //排除坐标等于自己的情况continue;}min_distance min(min_distance, distance);}res.push_back(min_distance); //由于依次遍历ij所以放进的位置也是按照顺序的}}result.push_back(res); //遍历完每一行后放进二维数组res.clear(); //及时清空一维数组}string r ;for (auto x : result) {for (auto y : x) {r to_string(y) ,;}r r.substr(0, r.size() - 1) ],[;}r [[ r.substr(0, r.size() - 2) ];cout r endl;return 0;
}