以前写的.....贴出来,题目意思大概是找a,b两个人是否有关系...
#include <iostream>
#include <cstring>
using namespace std;
bool Find;
int n,m,flag[30],M[30][30];
void ss(int x,int y)
{
flag[x]=1;
for(int i=0;i<=26;i++)
{
if(M[x][i]==1&&flag[i]==0) { //if后面有一个括号,当时忘记了加,想了很久。。。
if(i==y) {Find=true;return;}
ss(i,y);}
}
//return Find;
}
int main()
{
//while(cin>>n>>m)
cin>>n>>m;
char x,y;
memset(M,0,sizeof(M));
while(n--)
{
cin>>x>>y;
M[x-'A'][y-'A']=1;
M[y-'A'][x-'A']=1;
}
while(m--)
{
cin>>x>>y;
memset(flag,0,sizeof(flag));
Find=false;
ss(x-'A',y-'A');
if(Find==true) cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}
//这道题挺经典的,和水池问题有相像之处。。。
题目大概思路是给一个测试数据,里面有几组值,分别是每个字母之间有联系
所以可以用二维数组将有联系的标记为1,然后在调用函数里面进行dps。。。。