我与谁有关系 图

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

        }

    }
}

猜你喜欢

转载自blog.csdn.net/weixin_40571965/article/details/80629384
今日推荐