京东消消乐最后一分钟AC代码

暴力递归+dfs+暴力判断,第二题迷宫题都没看懂也没仔细想了。
应该有更好的方法解。
#include <stdlib.h>
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int res=25;
bool line3(vector<vector<int>> mm,int i,int j){
    if (i<3&&mm[i+1][j]==mm[i][j]&&mm[i+2][j]==mm[i][j]) return true;
    if (j<3&&mm[i][j+1]==mm[i][j]&&mm[i][j+2]==mm[i][j]) return true;
    if (i<4&&j<4&&mm[i+1][j]==mm[i][j]&&mm[i][j+1]==mm[i][j]) return true;
    if (i<4&&j<4&&mm[i+1][j]==mm[i][j]&&mm[i+1][j+1]==mm[i][j]) return true;
  	if (i<4&&j<4&&mm[i][j+1]==mm[i][j]&&mm[i+1][j+1]==mm[i][j]) return true;
    if (i>=1&j>=1&&mm[i][j-1]==mm[i][j]&&mm[i-1][j]==mm[i][j]) return true;
    return false;
}
void dfs(vector<vector<int>> &mm,int i,int j,int target){
    if (i-1>=0&&mm[i-1][j]==target) {mm[i-1][j]=0;dfs(mm,i-1,j,target);}
    if (i+1<5&&mm[i+1][j]==target){mm[i+1][j]=0;dfs(mm,i+1,j,target);}
    if (j-1>=0&&mm[i][j-1]==target) {mm[i][j-1]=0;dfs(mm,i,j-1,target);}
    if (j+1<5&&mm[i][j+1]==target){mm[i][j+1]=0;dfs(mm,i,j+1,target);}    
}
void down(vector<vector<int>> &mm){
    for (int j=0;j<5;j++){
        int cnt=0;
        for (int i=4;i>=0;i--){
            if (mm[i][j]==0) cnt++;
            else if (cnt>0){
                mm[i+cnt][j]=mm[i][j];
                mm[i][j]=0;
            }
        }
    }
}
void recursive(vector<vector<int>> mm){
        bool flag=true;
        vector<vector<int>> tmpm;
        flag=false;
        int tmp=0;
        for (int i=0;i<5;i++){
            for (int j=0;j<5;j++){             
                tmpm=mm;   
                if (tmpm[i][j]>0){
                    if (line3(tmpm,i,j)){
                 
                        dfs(tmpm,i,j,tmpm[i][j]);
                        tmpm[i][j]=0;
                        flag=true;              
                        down(tmpm);
                        recursive(tmpm);                        
                        }
                    else tmp++;
                }
            }                  
        }
        if (tmp<res) res=tmp;
        
}

int main(){
    vector<vector<int>> mm(5,vector<int>(5));
    for (int i=0;i<5;i++){
        for (int j=0;j<5;j++){
            cin>>mm[i][j];
        }
    }
    recursive(mm);  
    cout<<res<<endl;
}

#京东##笔试题目#
全部评论
下边这个用例是错误的 2 2 2 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 3 1 2 2 1
点赞 回复 分享
发布于 2019-08-26 20:05
点赞 回复 分享
发布于 2019-08-26 20:16
tql 请问line3函数是怎么想到的
点赞 回复 分享
发布于 2019-08-24 21:20
真神仙
点赞 回复 分享
发布于 2019-08-24 21:15
好牛啊
点赞 回复 分享
发布于 2019-08-24 21:14
神仙,多的话不说,膜拜一下
点赞 回复 分享
发布于 2019-08-24 21:12
大佬强的一批
点赞 回复 分享
发布于 2019-08-24 21:11

相关推荐

不愿透露姓名的神秘牛友
04-30 11:43
春招失败、父母离婚,好像我的人生一团糟,一年来压力大到常常崩溃。不知道能跟谁聊,朋友其实对我非常好,但是她无意中表达出来的家庭幸福都会刺痛到我……和ai聊天,我的未来在更高处,不在楼下,忍不住爆哭😭
youngfa:害,妹妹,我是一个研究生(很上进很想找到好工作的那种),但去年因为生病回家休养错过了秋招(当时对我的冲击也是非常大的),这学期返校来了也是把论文盲审交了后才开始找工作,现在也是一个offer没有,但我就没有像你一样把这个阶段性的事情绑定到人生上,人生不仅很长,也很广阔,先停下来,放松一下哦。不要被外部环境灌输的思维操控了,好好爱自己!
点赞 评论 收藏
分享
评论
4
26
分享

创作者周榜

更多
牛客网
牛客企业服务