一开始想复杂了,一开始我打算用vector写,之后类似于二叉遍历再遍历一遍,但是太麻烦了
后来看了大佬的博客,才受到启发
可以将树存为图,之后利用DFS遍历即可
这已经不是第一次北邮将树变为图才能解决的题了,应该受到教训了
#include<iostream>
#include<cstdio>
#include<queue>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<map>
using namespace std;
bool bian[105][105];
string ans;
string s;
int num;
bool vis[105];
string dfs(int node,string now){
int pos=-1;
for(int i=0;i<num;i++){
if(bian[node][i]==1&&vis[i]==0){
vis[i]=1;
pos=i;
now=dfs(i,now);
break;
}
}
now+=s[node];
if(pos==-1)
return now;
else{
for(int i=pos+1;i<=num;i++){
if(bian[node][i]==1&&vis[i]==0){
vis[i]=1;
now=dfs(i,now);
}
}
return now;
}
}
int main(){
while(cin>>num){
memset(bian,0,sizeof(bian));
cin>>s;
ans="";
for(int i=0;i<num-1;i++){
int a,b;
cin>>a>>b;
bian[a][b]=1;
bian[b][a]=1;
}
for(int i=0;i<num;i++){
memset(vis,0,sizeof(vis));
vis[i]=1;
if(i==0){
ans=dfs(i,"");
}
else{
string temp=dfs(i,"");
if(temp<ans){
ans=temp;
}
}
}
cout<<ans<<endl;
}
}