农场主想要让他的牛群按照逆时针螺旋的顺序移动。现在给你一个 m 行 n 列的矩阵 matrix,表示农场中每个位置上牛的数量。请按照逆时针螺旋顺序,返回矩阵中的所有元素。
区块链毕设网qklbishe.com为您提供问题的解答
农场主想要让他的牛群按照逆时针螺旋的顺序移动。现在给你一个 m 行 n 列的矩阵 matrix,表示农场中每个位置上牛的数量。请按照逆时针螺旋顺序,返回矩阵中的所有元素。
//1.采用下右上左为一个轮回进行遍历
//2.用哈希表存储已经路过的位置, 避免重复遍历
vector<int> vec;
vector<vector<int>> Dir = {{1,0},{0,1},{-1,0},{0,-1}}; //下右上左
unordered_map<int, int> Hash; //存着已遍历过的编号 <编号, null>
//编号为 x * col + y + 1
int x = 0;
int y = 0; //表当前
int nextx = 0;
int nexty = 0; //表下一位
int row = matrix.size();
int col = matrix[0].size();
int Limit = 0;
bool flag = true;
vec.push_back(matrix[0][0]);
Hash.insert(make_pair(1, 0));
while(flag){ //当flag不转为true,说明一个轮回里已经没有值加入了,即结束了
flag = false;
for(int i = 0; i<4; i++){ //下右上左为一个轮回
Limit = i%2 == 0? row:col;
for(;;){
x += Dir[i][0];
y += Dir[i][1]; //移到下一位
if(x >= row || x < 0 || y < 0 || y >= col ){
x -= Dir[i][0];
y -= Dir[i][1]; //回溯上一位
break;
}
if(Hash.find(x * col + y + 1) == Hash.end()){
Hash.insert(make_pair(x * col + y + 1, 0));
cout <<x * col + y + 1 <<" ";
vec.push_back(matrix[x][y]);
flag = true; //此次循环有加入数值
}
else{
x -= Dir[i][0];
y -= Dir[i][1]; //回溯上一位
break;
}
}
}
}
return vec;
}
05:17
以上就是关于问题农场主想要让他的牛群按照逆时针螺旋的顺序移动。现在给你一个 m 行 n 列的矩阵 matrix,表示农场中每个位置上牛的数量。请按照逆时针螺旋顺序,返回矩阵中的所有元素。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训