数据有多组
每组数据先输入一个n表示有n个人(1 <= n <= 100)
接着一行输入n个人所代表的字符ai(可能不是按照字典顺序排列的),分别表示邻接矩阵第i行和第i列所代表的人
接下来n行n列,只有0和1组成的01矩阵,分别表示第i个人和第j个人是否有关系。1表示有关系,0表示没关系
接下来一行输入一个m,表示要询问m次
接下来m行,每行一个字符b,表示要询问的字符b的人。
输出要求
每次输出m行,每一行表示被询问的b与他有关系的人有哪些
按照字典序顺序打印他们的字符。每个字符之间有一个空格,最后一个字符后无空格。
若没有与之有关系的人,则输出一个空行。
测试数据
输入示例
5
A B C D E
0 1 1 0 0
1 0 0 1 1
1 0 0 0 0
0 1 0 0 1
0 1 0 1 0
3
A
B
C
输出示例
B C
A D E
A
代码
#include <stdio.h>
#include <string.h>
int main()
{
int n,m;
char ai[122],c[122];
int b[122][122];
char ch;
while(~scanf("%d\t",&n))
{
for(int i=0;i<n;i++)
scanf("%c\t",&ai[i]);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
{
scanf("%d",&b[i][j]);
}
}
scanf("%d\t",&m);
while(m--)
{
scanf("%c",&ch);
////输入结束
int num,sum=0,t=0;
for(int i=0;i<n;i++){
if(ai[i]==ch)
num=i; //找到输入字符对应的索引
}
for(int i=0;i<n;i++){
if(b[num][i]==1)
{
c[sum]=ai[i]; //等于1的有关系的放在一个数组里
sum++;
}
}
if(sum==0)
printf("\n");
else
{
for(int i=0;i<sum-1;i++){
for(int j=i+1;j<sum;j++){
if(c[i]>c[j]){
char m=c[i];
c[i]=c[j];
c[j]=m;
}
}
}
for(int i=0;i<sum;i++)
{
if(i!=sum-1)
printf("%c ",c[i]);
else
printf("%c\n",c[i]);
}
}
getchar();
}
}
}