数据有多组 每组数据先输入一个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(); } } }