为什么感觉差不多的两份代码,一份AC,一份64?(萌新去睡觉了,明天看)
100:
#include<bits/stdc++.h>
using namespace std;
int n,in[1005],out[1005];
vector<int > v[1005];
string a[1005];
bool f[1005];
void dfs(int k,int t,string qwq){
if(t==n) qwq.erase(qwq.size()-1,1),cout<<qwq,exit(0);
for(int i=0;i<v[k].size();i++){
int l=v[k][i];
if(!f[l]){
f[l]=1;
dfs(l,t+1,qwq+a[l]+'.');
f[l]=0;
}
}
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],in[a[i][0]]++,out[a[i][a[i].size()-1]]++;
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j&&a[i][a[i].size()-1]==a[j][0])
v[i].push_back(j);
for(int i=1;i<=n;i++)
if(in[a[i][0]]-1==out[a[i][0]]){
f[i]=1;
dfs(i,1,a[i]+'.');
f[i]=0;
}
f[1]=1;
dfs(1,1,a[1]+'.');
puts("***");
return 0;
}
64:
#include<bits/stdc++.h>
using namespace std;
int n,in[1005],out[1005];
vector<int > v[1005];
string a[1005];
bool f[1005];
void dfs(int k,int t,string qwq){
if(t==n) /*qwq.erase(qwq.size()-1,1),*/cout<<qwq,exit(0);
for(int i=0;i<v[k].size();i++){
int l=v[k][i];
if(!f[l]){
f[l]=1;
dfs(l,t+1,qwq+'.'+a[l]);
f[l]=0;
}
}
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],in[a[i][0]]++,out[a[i][a[i].size()-1]]++;
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j&&a[i][a[i].size()-1]==a[j][0])
v[i].push_back(j);
for(int i=1;i<=n;i++)
if(in[a[i][0]]-1==out[a[i][0]]){
f[i]=1;
dfs(i,1,a[i]);
f[i]=0;
}
f[1]=1;
dfs(1,1,a[1]+'.');
puts("***");
return 0;
}