고대어사전(dictionary

  • lht94
    lht94
    #include<iostream>
    #include<vector>
    #include<string>
    #include<algorithm>
    using namespace std;
    
    vector<int> seen,order;
    vector<vector<int>> adj;
    
    void makegraph(const vector<string>& words)
    {
        adj=vector<vector<int>>(26,vector<int>(26,0));
        for(int j=1; j<words.size(); j++)
        {
            int i=j-1, len=min(words[i].size(),words[j].size());
            for(int k=0; k<len; k++){
    
                if(words[i][k]!=words[j][k]){
                    int a=words[i][k]-'a';
                    int b=words[j][k]-'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<int> topologicalsort(){
        int n= adj.size();
        seen=vector<int>(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 cases;
        cin>>cases;
    
        for(int cc=0; cc<cases; cc++)
        {
            vector<string> words;
            int num;
            vector<int>a;
            cin>>num;
    
            for(int i=0; i<num; i++)
            {
    
                string s;
                cin>>s;
                words.push_back(s);
    
            }
            makegraph(words);
            a=topologicalsort();
    
            if(a.empty())
                cout<<"INVALID HYPOTHESIS";
            else
            {
                for(int n=0;n<adj.size(); n++)
                    {
                        char c=a[n]+'a';
                cout<<c;}
    
    
            }
    
    
    
        }
    }
    

    책보고 작성해본 코드인데요..

    틀린부분이 있는거 같은데 찾지못해 올려봅니다.

    main 작성을 잘못한거 같긴한데
    실행해보면 이상하긴해도 사전순서를 지키거든요 ??

    근데 제출해보면 오답처리되서..

    뭐가잘못된건지 모르겠네요.


    11년 전
3개의 댓글이 있습니다.
  • Kureyo
    Kureyo

    왠지 줄내림을 안하시는ㅓ같은데요..


    11년 전 link
  • Signin
    Signin

    네 줄바꿈 해서 제출하니까 정답이 뜨네요 ㅎ
    INVALID HYPOTHESIS 과, 전체 출력한 뒤의 줄바꿈만 해주시면
    될 것 같습니다.


    11년 전 link
  • lht94
    lht94

    해결됬네요감사합니다건.


    11년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.