题目:http://10.105.242.80/problem/p/109/
dfs的应用,每次一到dfs我就蒙圈,这样的题要多加练习了
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int rel[110][110];
int visited[110];
char cda[110];
string temp;
string result;
void dfs(int pos,int n){
vector<int> son;
visited[pos]=1;
for(int i=0;i<n;i++){
if(pos==i) continue;
if(rel[pos][i] && !visited[i]){
son.push_back(i);
}
}
if(son.size()>0){
dfs(son[0],n);
temp+=cda[pos];
for(int i=1;i<son.size();i++){
dfs(son[i],n);
}
}else{
temp+=cda[pos];
}
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
scanf("%s",cda);
memset(rel,0,sizeof(rel));
for(int i=0;i<n-1;i++){
int a,b;
scanf("%d%d",&a,&b);
rel[a][b]=1;
rel[b][a]=1;
}
for(int i=0;i<n;i++){ //以i为根节点
memset(visited,0,sizeof(visited));
temp="";
dfs(i,n);
if(i==0){
result=temp;
}else if(temp<result){
result=temp;
}
}
printf("%s\n",result.c_str());
}
return 0;
}