2019-08-24 21:04
东北大学 算法工程师 羚羊在找内推:消消乐的代码,我第二题是消消乐,第一题是字母转换,不太一样.发一下第二题的. 第一题的找不到了..我直接删掉了 #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;
}

0 点赞 评论 收藏
分享
冰雪童话:确定X的上界和下界,上界为血量最高的怪物,下界为T回合总输出刚好为怪物血量总和,然后贪心测试X是否合法,二分查找X
0 点赞 评论 收藏
分享
乔佛里:rt是啥意思啊?

0 点赞 评论 收藏
分享
叶上水:0 ×4

0 点赞 评论 收藏
分享
创作者周榜
更多
关注他的用户也关注了: