哪位大佬帮我看看这个代码为什么有两个点TLE
  • 板块P1127 词链
  • 楼主STUDENT00
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/9/25 19:09
  • 上次更新2023/10/28 20:43:36
查看原帖
哪位大佬帮我看看这个代码为什么有两个点TLE
658786
STUDENT00楼主2022/9/25 19:09
#include<bits/stdc++.h>
using namespace std;
int n,num[1010],s,p[1010],t;
string str[1010]; 
bool vis[1010];
vector<int> a[1010];
void dfs(int first,int now,int s){
	t++;
	if(t>1e7){
		printf("***");
		exit(0);
	}
	if(s==n){
		cout<<str[first];
		for(int i=1;i<n;i++) cout<<"."<<str[p[i]];
		exit(0);
	}
	for(int i=0;i<num[now];i++){
	    int k=a[now][i];
		if(!vis[k]){
			vis[k]=1;
			p[s]=k;
			dfs(first,k,s+1);
			p[s]=0;
			vis[k]=0;
		}
	}
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) cin>>str[i];
	sort(str+1,str+n+1);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i!=j&&str[i][str[i].length()-1]==str[j][0]){
				num[i]++;
				a[i].push_back(j);
			}
		}
	} 
	for(int i=1;i<=n;i++){
		vis[i]=1;
		dfs(i,i,1);
		vis[i]=0;
	}
	printf("***");
	return 0;
}
2022/9/25 19:09
加载中...