为何样例能过但是测试全WA
  • 板块P1127 词链
  • 楼主Dusk777
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/23 09:28
  • 上次更新2024/7/23 10:19:08
查看原帖
为何样例能过但是测试全WA
1254795
Dusk777楼主2024/7/23 09:28

为何样例全过但是测试全WA

是做法本身就有问题吗

using namespace std;
#define ll long long
vector<string> s(1005);
vector<vector<ll>> adj(1005);
vector<ll> du(1005,0);
vector<ll> vis(1005,0);
ll n;
ll start=0,ending=0,cnt=0;
bool cmp(ll a,ll b){
	return s[a]<s[b];
}
void dfs(ll x,ll c, string l){
	if(c==n){
		cout<<l;
		return;
	}
	else{
		for(int i=0;i<adj[x].size();i++){
			if(vis[adj[x][i]]==0){
				vis[adj[x][i]]=1;
				dfs(adj[x][i],c+1,l+'.'+s[adj[x][i]]);
				vis[adj[x][i]]=0;
			}
		}
	}
}
int main(){
	
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s[i];
		for(int j=1;j<i;j++){//建图记录度
			if(s[j].front()==s[i].back()){
				adj[i].push_back(j);
				du[j]--;
				du[i]++;
			}
			if(s[i].front()==s[j].back()){
				adj[j].push_back(i);
				du[i]--;
				du[j]++;
			}
		}
	}
	
	for(int i=1;i<=n;i++){
		sort(adj[i].begin(),adj[i].end(),cmp);//字典序排列邻接表
	}

	for(int i=1;i<=n;i++){
		if(du[i]!=0){//根据度来判断起始点
			cnt++;
			if(du[i]==1){
				start=i;
			}
			if(du[i]==-1){
				ending=i;
			}
		}
		if(cnt>2){
			cout<<"***";
			return 0;
		}
	}
	
	
	if(cnt==0){//没有明确的起始点就拿最小点当起始点
		for(int i=1;i<=n;i++){
			if(s[start]>s[i]){
				start=i;
			}
		}
	}
	
	vis[start] = 1;
	dfs(start,1,s[start]);
	
}```
求指导
2024/7/23 09:28
加载中...