京东消消乐最后一分钟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; }
#京东##笔试题目#