1 条题解
-
0
#include <iostream> #include <vector> #include <algorithm> #include <unordered_map> #include <unordered_set> using namespace std; void dfs(vector<vector<char>>&graph,int cur,unordered_set<char> &set,int depth,int index,int &maxV){ if(cur<0||cur>=graph.size())return; if(index<0||graph[cur].size()<=index)return; if(set.count(graph[cur][index])){//set已存在该项,说明已成环,退出DFS return; } set.emplace(graph[cur][index]); maxV=max(depth+1,maxV); for(int i=index+1;i<graph[cur].size();i++){ int num=graph[cur][i]; for(int j=0;j<graph[num].size();j++){ dfs(graph,num,set,depth+1,j,maxV); } } } int calRes(vector<pair<char,char>>&cards){ int maxV=0; int n=cards.size(); vector<vector<char>>graph; for(int i=0;i<n;i++){ vector<char>tmp; for(int j=0;j<n;j++){ if(i==j)continue; if((cards[i].first==cards[j].first)||(cards[i].second==cards[j].second)){ tmp.push_back(j); } } graph.push_back(tmp); //for(auto ii:tmp)cout<<(int)ii<<" "; //cout<<"EDN"<<endl; }//将牌和颜色的打出规则构建成图 unordered_set<char> set; for(int i=0;i<n;i++){ dfs(graph,i,set,1,0,maxV); set.clear(); }//暴力DFS遍历 return maxV; } int main(){ vector<char>numV,colorV; vector<pair<char, char>>cards; char tmp; while(cin>>tmp){ if(tmp>='1'&&tmp<='9'){ numV.push_back(tmp); }else{ colorV.push_back(tmp); } } for(auto i=0;i<numV.size();i++){ cards.push_back({numV[i],colorV[i]}); } cout<<calRes(cards)<<endl; return 0; }
- 1
信息
- ID
- 87
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 76
- 已通过
- 33
- 上传者