2개의 댓글이 있습니다.
-
-
best88 -
제출했던 소스입니다ㅠㅠ
도움 주시면 감사하겠습니다 ㅠㅠvector
words;
vector> adj;
vectororder, rev_order, seen; void makegraph()
{
adj = vector>(26, vector (26,0)); for(int j = 1; j < words.size() ; ++j) { int i = j - 1; int len = min(words[i].size(), words[j].size()); for(int x = 0 ; x < len ; ++x) { if(words[i][x] != words[j][x]) { int a = words[i][x] - 'a'; int b = words[j][x] - 'a'; adj[a][b] = 1; break; } } }
}
void dfs(int here)
{
seen[here] = 1;for(int there = 0 ; there < adj.size() ; there++) if(adj[here][there] && !seen[there]) dfs(there); order.push_back(here);
}
vector
topologicakSort()
{
int n = adj.size();
seen = vector(n, 0);
order.clear();for(int i = 0 ; i < n ; ++i) { if(!seen[i]) dfs(i); } reverse(order.begin(), order.end()); for(int i = 0 ; i < n ; ++i) for(int j = i + 1 ; j < n ; ++j) if(adj[order[j]][order[i]]) return vector<int>(); return order;
}
int main()
{
int _case, _word;
string word;cin>>_case; for(int i = 0 ; i < _case ; i++) { cin>>_word; for(int j = 0 ; j < _word ; j++) { cin>>word; words.push_back(word); } makegraph(); vector<int> ref = topologicakSort(); if(ref.size() == 0) { cout<<"INVALID HYPOTHESIS"<<endl; } else { for(int x = 0 ; x < ref.size() ; x++) { char temp = 'a' + ref[x]; cout<<temp; } } } return 0;
}
8년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
best88
'프로그래밍 대회에서 배우는 알고리즘 문제해결전략'에서 고대어 사전을 보고 문제를 풀어봤는데...
책에 있는 소스 그래로 구현해서 돌려봤는데 정답이 다르게 나옵니다.
고대어 사전 문제 모범 답안을 알고 싶습니다 ㅠㅠ
8년 전