小迷糊彭斯斯

【问题描述】

斯彭斯是一个容易迷路的迷糊小孩,现在她要出发去一个指定的地方,有很多的起点可以选择,但终点只有一个,请帮她选择一定能到达终点的起点吧
【输入形式】

第一行输入总结点数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;
} 

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值