水题。
开始看错,当成按照每个节点代表的字符顺序访问了,后来改完就可以了。
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
char func[101];
bool relation[100][100]={false};
bool visited[100]={false};
string result;
string temp;
void dfs(int pos,int n)
{
int son[100];
int size=0;
visited[pos]=true;
for(int j=0;j<n;j++)
{
if(j==pos)continue;
if(relation[pos][j]==true&&!visited[j])
{
son[size++]=j;
}
}
if(size>0)
{
dfs(son[0],n);
temp+=func[pos];
for(int j=1;j<size;j++)
{
dfs(son[j],n);
}
}
else if(size==0)temp+=func[pos];
}
int main()
{
int n,a,b,t;
while(cin>>n)
{
result="";
temp="";
cin>>func;
t=n;
t--;
memset(relation,0,sizeof(relation));
//cout<<relation[99][99];
while(t--)
{
cin>>a>>b;
relation[a][b]=true;
relation[b][a]=true;
}
int it=-1;
for(int i=0;i<n;i++)
{
memset(visited,0,sizeof(visited));
dfs(i,n);
// cout<<"以"<<i<<"("<<func[i]<<")"<<"为根"<<temp<<endl;
if(i==0){
result=temp;it=i;}
else if(result>temp){
result=temp;it=i;}
temp="";
}
cout<<result<<endl;
}
}