【问题描述】
斯彭斯是一个容易迷路的迷糊小孩,现在她要出发去一个指定的地方,有很多的起点可以选择,但终点只有一个,请帮她选择一定能到达终点的起点吧
【输入形式】
第一行输入总结点数N和终点,接下来N行输入各点间的连接状态
【输出形式】
能到达终点的起点(按字典序), 如果没有满足条件的起点则输出None
【样例输入】
7 F A: {B:1, C:1} B: {C:1, D:1} C: {F:1} D: {A:1} E: {F:1} F: {G:1} G: {A:1}
【样例输出】
C E
#include <bits/stdc++.h>
using namespace std;
int n;
char c;
int m[200][200];
int v[1002];
int f = 0;
void DFS(int x){
for(int i = 0; i < n; i++){
if(!v[i] && m[i][x]){
for(int j = 0 ; j < n; j++){
if(!v[j] && m[i][j]) return;
}
f = 1;
v[i] = 1;
DFS(i);
}
}
}
int main(){
cin >> n >> c;
char ch;
while(1){
ch = getchar();
if(ch >= 'A' && ch <= 'Z'){
int x = ch - 'A';
while(1){
ch = getchar();
if(ch == '\n')break;
if(ch >= 'A' && ch <= 'Z'){
m[x][ch - 'A'] = 1;
}
}
if(x == n - 1)break;
}
}
v[c - 'A'] = 1;
DFS(c - 'A');
for(int i = 0; i < n; i++){
if(v[i] && i!= c - 'A'){
cout << char(i + 'A') << " ";
}
}
if(!f){
cout << "None";
}
return 0;
}