m0_75102521 2023-06-26 23:37 采纳率: 0%
浏览 55
已结题

安排教学计划问题 并提供实验告

img


实验报告包括
1.题目描述;
2.基本思路;
3.详细设计:
设计了哪些模块,模块简要说明,列出每个子程序函数名及功能说明;
4.主要源代码,与设计部分一一对应;
5.测试、运行截图及结果分析
5.测试、运行截图及结果分析。

  • 写回答

8条回答 默认 最新

  • Minuw 2023-06-27 08:30
    关注
    获得1.40元问题酬金

    img

    
    #include<stdio.h>
    
    int maxterm=12,maxclass=100;   //学期上限12,课程最大100 
    int allterm,maxxf,num;            //学期总数 学分上限 课程数 
    int Graph[100][100]={0};       //邻接矩阵;
    int indegree[100]={0};         //入度矩阵 
    int visit[100]={0};            //visit数组 
    int Q[100];                    //临时队列
    int end=0,top=0;               //队列头尾 
    int over[100]={0};             //排完的课程 
     
    typedef struct class
    {
        char name[3];
        int xf;
    }class,*pclass;
    
    class CLASS[100];
    
    void creat()        //图的创建 
    {
        int i,v;
        char a;
        scanf("%d",&allterm);
        scanf("%d",&maxxf);
        scanf("%d",&num);
        for(i=0;i<num;i++)
        {
            scanf("%s",CLASS[i].name);
            scanf("%d",&CLASS[i].xf);
            while((a=getchar())!='\n')
            {
                a=getchar();
                scanf("%d",&v);
                Graph[v-1][i]=1;
                indegree[i]++;
            }
        }
    }
    
    void display()       //画出邻接矩阵 
    {
        int i,j;
        printf("————邻接矩阵————\n") ;
        for(i=0;i<num;i++)
        {
            for(j=0;j<num;j++)
            {
                printf("%d%c",Graph[i][j],j==num-1?'\n':' ');
            }
        }
        printf("—————————————\n") ;
    }
    
    int front()
    {
        return Q[top];
    }
    void push(int i)
    {
        Q[end++]=i;
    }
    
    void pop()
    {
        top++;
    }
    
    int empty()
    {
        if(top==end)
            return 1;
        else
            return 0;
    }
    void top_sort()
    {
        int i,j,V,count=0;
        for(i=0;i<num;i++)
        {
            if(indegree[i]==0)
                push(i);
        }
        while(!empty())
        {
            V=front();
            over[count++]=V;
            visit[V]=1;
            pop();
            for(j=0;j<num;j++)
            {    
                if(Graph[V][j]==1)
                {
                    indegree[j]--;
                    if(indegree[j]==0)
                        push(j);
                }
            }
        }
        for(i=0;i<num;i++)
        {
            if(visit[i]==0)
                printf("课程存在错误\n");
                break;
        }
    }
    
    void solve1()
    {
        int i,j,one_term,more,mark=0;
        one_term=num/allterm;
        more=num%allterm;
        for(i=0;i<more;i++)
        {
            printf("第%d个学期课程安排:",i+1);
            for(j=0;j<one_term+1;j++)
            {
                printf("%s ",CLASS[over[j+i*(one_term+1)]].name);
            }
            putchar('\n');
        }
        mark=more*(one_term+1)-1;
        for(i;i<allterm;i++)
        {
            printf("第%d个学期课程安排:",i+1);
            for(j=0;j<one_term;j++)
            {
                printf("%s ",CLASS[over[more+j+i*one_term]].name);
            }
            putchar('\n');
        }
    }
    
    void solve2()
    {
        int i=1,j=0,total;
        while(i<=allterm)
        {
            total=0;
            printf("第%d个学期课程安排:",i);
            while(total<=10 && j<num)
            {
                total+=CLASS[over[j]].xf;
                if(total<=maxxf)
                {
                    printf("%s ",CLASS[over[j]].name);
                }
                j++;
            }
            putchar('\n');
            j--;
            i++;
        }
        
    }
    
    int main()
    {
        int i,j,solve;
        creat();
        display();
        top_sort();
        printf("平均安排输出1,密集安排输入2:");
        scanf("%d",&solve);
        if(solve==1)
            solve1();
        else
            solve2();
        return 0;
    }
    
    /*
    测试数据
    6 10 12
    c1 2
    c2 3 c1
    c3 4 c1 c2
    c4 3 c1
    c5 2 c3 c4
    c6 3 c11
    c7 4 c3 c5
    c8 4 c3 c6
    c9 7
    c10 5 c9
    c11 2 c9
    c12 3 c1 c9 c10
    */码片
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月4日
  • 创建了问题 6月26日