普通的dfs
写的一塌糊涂
#include <iostream>
#include <memory.h>
#include <cstdio>
#include <vector>
using namespace std;
#define MAX 30
vector<char> g[MAX];
int k;
char buf[300] ,*buf1,*buf2,*buf3;
bool lit[MAX],f;
vector<char>ans;
void dfs(int u,int cnt,int father){
int fla=0;
if(cnt==k){
lit[u]=1;
fla=1;
cnt=0;
ans.push_back(u+'A');
}
int flag=0;
for(int i=0;i<g[u].size();++i){
if(!lit[g[u][i]]&&g[u][i]!=father){
dfs(g[u][i],cnt+1,u);
flag=1;
if(f)return;
}
}
if(flag==0){
if(fla==0)
ans.push_back(u+'A');
f=1;
}
}
int main(){
while(gets(buf)&&strcmp(buf,"#")){
for (int i=0;i<MAX;++i)g[i].clear();
ans.clear();
memset(lit,0,sizeof(lit));
memset(g,0,sizeof(g));
buf1=strtok(buf,".");
buf2=strtok(NULL,".");
buf3=strtok(buf1,";");
do{
for(int i=2;i<strlen(buf3);++i){
g[buf3[0]-'A'].push_back(buf3[i]-'A');
}
}while(buf3=strtok(NULL,";"));
char c1,c2;
f=0;
sscanf(buf2," %c %c %d",&c1,&c2,&k);
dfs(c1-'A',1,c2-'A');
for(int i=0;i<ans.size();++i){
if(ans.size()==i+1){
printf("/%c\n",ans[i]);
}else{
printf("%c ",ans[i]);
}
}
}
return 0;
}