36分求助!!!!
  • 板块P1127 词链
  • 楼主FstAutoMaton
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/28 13:49
  • 上次更新2023/10/28 20:43:23
查看原帖
36分求助!!!!
677234
FstAutoMaton楼主2022/10/28 13:49
#include <bits/stdc++.h>
using namespace std;
int n, ans[1005], timecnt;
bool l[1005];
string s[1005];
vector <int> V[1005];
void dfs( int x, int num )
{
    l[x] = 1;
    ans[num] = x;
    timecnt ++;
    if( timecnt > 1e7 )
    {
        cout << "***";
        exit( 0 );
    }
    if( num == n )
    {
        for( int i = 1; i < n; i ++ ) cout << s[ans[i]] << ".";
        cout << s[n] <<endl;
        exit( 0 );
    }
    for( int i = 0, sz = V[x].size(); i < sz; i ++ )
    {
        if( l[V[x][i]] ) continue;
        dfs( V[x][i], num + 1 );
    }
    l[x] = 0;
}
int main()
{
    cin >> n;
    for( int i = 1; i <= n; i ++ )
    {
        cin >> s[i];
    }
    sort( s + 1, s + n + 1 );
    for( int i = 1; i <= n; i ++ )
    {
        for( int j = 1; j <= n; j ++ )
        {
            if( i == j ) continue;
            if( s[i][s[i].size() - 1] != s[j][0] ) continue;
            V[i].push_back( j );
        }
    }
    for( int i = 1; i <= n; i ++ )
    {
        l[i] = 1;
        ans[i] = i;
        dfs( i, 1 );
        memset( l, 0, sizeof( l ) );
        memset( ans, 0, sizeof( ans ) );
    }
    cout << "***";
}
2022/10/28 13:49
加载中...