vijos 1030 重叠的方框

下图为5个放置在9x8 的点阵中的方框图:
若将他们按顺序叠放起来.则会有某些框的一部分盖住了另外一个框,遮住一些部分.
下图是这5个框叠放起来的图形:
那么这些方框从下至上叠放的顺序是什么呢?
答案是: EDABC.
你的任务是对于一个给定的方框叠放以后的图形, 找出他们从下至上的叠放顺序.
下面是一些规则:
(1). 方框的边宽度为一个字符,边长不少于3个字符;
(2). 每个方框的4条边都有一部分可见, 一个角代表两条边;
(3). 方框用大写字母了表示, 没有两个方框用相同的字符来表示.

格式
输入格式
前两行每行一个数字,分别表示长、宽。

接下来为框叠起来的图。没有框的地方用'.'表示。

输出格式
输出全部可能情况。

按字典顺序排序。
#重叠的方框
拓扑排序不知道怎么输出所有可能顺序

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7619927
  • 这篇博客也不错, 你可以看下请检查下面的程序,找出其中的错误并改正,然后上机调试,使之能正常运行,从键盘输入,检查输出
  • 除此之外, 这篇博客: 习题 8.15 有一个班4个学生,5门课程。1. 求第1门课程的平均分;2.找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;3.找出平均成绩在90分以上或全部课程成绩在85分以中的 习题 8.15 有一个班4个学生,5门课程。1. 求第1门课程的平均分;2.找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;3.找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 代码块:

    #include <stdio.h>
    #include <stdlib.h>
    void aver_fcourse(int *s[4], int n);           //定义函数1
    void two_fail(int *s[4], int m, int n);        //定义函数2
    void high_score(int *s[4], int m, int n);      //定义函数3
    int main()
    {
        int *stu_score[4], i, j;
        for (i=0; i<4; i++){
            stu_score[i]=(int *)malloc(3*sizeof(int));                   //给学生成绩分配动态空间
            printf("Please enter No.%d student score: ", i+1);           //输入学生成绩
            for (j=0; j<5; scanf("%d", *(stu_score+i)+j), j++);
        }
        aver_fcourse(stu_score, 4);                                      //调用函数1
        two_fail(stu_score, 4, 5);                                       //调用函数2
        high_score(stu_score, 4, 5);                                     //调用函数3
        return 0;
    }
    //函数1
    void aver_fcourse(int *s[4], int n)
    {
        int i;
        float sum;
        for (i=0, sum=0; i<n; sum+=*s[i++]);
        printf("The first course average score: %.2f\n", sum/n);
    }
    //函数2
    void two_fail(int *s[4], int m, int n)
    {
        int i, j, k, cc;
        float sum;
        for (i=0; i<m; i++){
            for (j=0, cc=0; j<n; *(*(s+i)+j)<60 ? cc++, j++ : j++);
            if (cc>=2){
                printf("No.%d student is fail.  Score: ", i+1);
                for (k=0, sum=0; k<n; printf("%d ", *(*(s+i)+k)), sum+=*(*(s+i)+k), k++);
                printf("\nAverage=%.2f\n", sum/n);
            }
        }
    }
    //函数3
    void high_score(int *s[4], int m, int n)
    {
        int i, j, cc;
        float sum, aver;
        for (i=0; i<m; i++){
            for (j=0, cc=0, sum=0; j<n; sum+=*(*(s+i)+j), *(*(s+i)+j)>85 ? cc++, j++ : j++);
            aver=sum/n;
            if (aver>90||cc==5)
                printf("No.%d student is high score.\n", i+1);
        }
    }