消消乐的代码,我第二题是消消乐,第一题是字母转换,不太一样.发一下第二题的. 第一题的找不到了..我直接删掉了 #include<bits/stdc++.h> using namespace std; int helper(vector<vector<int>>&nums, int i, int j) { int ret = 1; int cur = nums[i][j]; if (i < 0 || j < 0 || i >= 5 || j >= 5 || nums[i][j] == 0) return 0; nums[i][j] = 0; if (i >= 1 && nums[i - 1][j]==cur) { ret += helper(nums, i - 1, j); }if (j >= 1 && nums[i][j - 1] == cur) { ret += helper(nums, i, j - 1); }if (i <= 3 && nums[i + 1][j] == cur) { ret += helper(nums, i + 1, j); } if (j <= 3 && nums[i][j + 1] == cur) { ret += helper(nums, i, j + 1); } return ret; } // 消除并且把上面的落下来 void funcDrop(vector<vector<int>>&nums, int i, int j) { for (int j = 0;j < 5; j++) { int count = 4; for (int i = 4; i >= 0; i--) { if (nums[i][j] != 0) { nums[count--][j] = nums[i][j]; } } for (int i = count; i >= 0; i--) { nums[i][j] = 0; } } return; } int func(vector<vector<int>>&nums) { int ret = INT_MAX; vector<vector<int>>tmp = nums; int tag = 1; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { tmp = nums; // 假设点击这个 int count = helper(tmp, i, j); if (count >= 3) { // 吧当前消除并且上面的落下来... funcDrop(tmp, i, j); ret = min(ret, func(tmp)); tag = 0; } } } // 表示当前的矩阵不能在消除了 if (tag) { int count = 0; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (nums[i][j] != 0) { count++; } } } return count; } return ret; } int main() { vector<vector<int>>nums(5, vector<int>(5, 0)); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { cin >> nums[i][j]; } } cout << func(nums) << endl; return 0; }
点赞 7

相关推荐

点赞 评论 收藏
分享
没有offer的呆呆:薪资有的时候也能说明一些问题,太少了活不活得下去是一方面,感觉学习也有限
点赞 评论 收藏
分享
牛客网
牛客企业服务