Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 回溯算法在最小毕业学期数求解中的应用_C_Arrays_Backtracking - Fatal编程技术网

C 回溯算法在最小毕业学期数求解中的应用

C 回溯算法在最小毕业学期数求解中的应用,c,arrays,backtracking,C,Arrays,Backtracking,我从一个文件中获取输入,该文件包含 每学期的课程数量和最大允许课程数 所有课程名称(最多5个字母数字) 课程名称、提供的sem、资格预审数量、资格预审课程 -最后是1和-1 输出将是完成所有课程的最小学期数 这是我的代码,让你知道我已经完成了工作。我的代码正在编译和执行,但没有显示完成课程的SEM数量。 请告诉我哪里做错了 #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<

我从一个文件中获取输入,该文件包含

  • 每学期的课程数量和最大允许课程数
  • 所有课程名称(最多5个字母数字)
  • 课程名称、提供的sem、资格预审数量、资格预审课程
  • -最后是1和-1 输出将是完成所有课程的最小学期数
  • 这是我的代码,让你知道我已经完成了工作。我的代码正在编译和执行,但没有显示完成课程的SEM数量。 请告诉我哪里做错了

    #include<stdio.h>
    #include<stdlib.h>
    #include<stdbool.h>
    #include<string.h>
    #include<ctype.h>
    
    char garbage[12][6];
    char courseIdentifier[12][6],prereqIdentifier[12][5][6];
    char semOffered[12];
    bool done[12];
    
    bool allDone(int);
    bool donePrereq(int,int);
    
    int main(void)
    {
        FILE *fp;
        fp = fopen("graduate.in","r");
        int n,m,p;
        int i,j,k;
        for(i=0;i<12;i++)
        {
            strcpy(courseIdentifier[i],"");
        }
        for(i=0;i<12;i++)
        {
            for(j=0;j<5;j++)
            {
                strcpy(prereqIdentifier[i][j],"");
            }
        }
        fscanf(fp,"%d %d",&n,&m);// take n,m
        while(n != -1)
        {
    
            if( !(1<=n && n<=12) || !(2<=m && m<=6) )
            {
                printf("Wrong input");
            }
            for(i=0;i<n;i++) //the list of offered courses
            {
                fscanf(fp,"%s",garbage[i]);
            }
            for(i=0;i<n;i++)
            {
                fscanf(fp,"%s %c %d",courseIdentifier[i],&semOffered,&p);//the name of course, sem,no. of prereqs
                for(j=0;j<p;j++)
                {
                    fscanf(fp,"%s",prereqIdentifier[i][j]);
                }
            }
    
            int sem=1;
            char semNow = 'F';
            for(i=0;i<n;i++)
            {
                done[i]=false;
            }
            while(!allDone(n))
            {
                int count=0;
                //while(count<=m)
                //{
                    for(i=0;i<n;i++)
                    {
                        if( (semOffered[i]==semNow || semOffered[i]=='B') && donePrereq(p,n))
                        {
                            done[i] = true;
                            count++;
                        }
                    }
    
                //}
                sem++;
                if(semNow=='F')
                {
                    semNow='S';
                }
                else if(semNow=='S')
                {
                    semNow='F';
                }
            }
            printf("minimum number of semesters = %d\n",sem);
            fscanf(fp,"%d %d",&n,&m);// take n,m
        }
        return 1;
    }
    
    bool allDone(int n)
    {
        bool returnBool=true;
        int i;
        for(i=0;i<n;i++)
        {
            returnBool = returnBool && done[i];
        }
        return returnBool;
    
    }
    
    bool donePrereq(int p,int n)
    {
        bool returnBool=true;
        int i,j;
        for(i=0;i<p;i++)
        {
            for(j=0;j<n;j++)
            {
                if(strcmp(prereqIdentifier[i][j],courseIdentifier[j]) ==0 )
                {
                    printf("prereq matched\n");
                    returnBool = (returnBool&&done[j]);
                }
            }
        }
        return returnBool;
    }
    
    #包括
    #包括
    #包括
    #包括
    #包括
    煤焦垃圾[12][6];
    char-courseIdentifier[12][6],prereqIdentifier[12][5][6];
    提供了[12];
    bool-done[12];
    布尔-奥尔多内;
    布尔·多内普里克(国际,国际);
    内部主(空)
    {
    文件*fp;
    fp=fopen(“毕业于”,“r”);
    int n,m,p;
    int i,j,k;
    
    对于(i=0;i当您在此处扫描输入以获取有关每个课程的信息时:

            fscanf(fp,"%s %c %d",courseIdentifier[i],&semOffered,&p);
    
    &semOffered
    参数不正确。您需要提供指向
    char
    的指针。由于
    semOffered
    char
    的数组,您可能打算将其存储到索引位置:

            fscanf(fp,"%s %c %d",courseIdentifier[i],&semOffered[i],&p);
    

    这不会修复您的程序,但它允许程序完成。

    当您在此处扫描输入以获取有关每个提供课程的信息时:

            fscanf(fp,"%s %c %d",courseIdentifier[i],&semOffered,&p);
    
    &semOffered
    参数不正确。您需要提供指向
    char
    的指针。由于
    semOffered
    char
    的数组,您可能打算将其存储到索引位置:

            fscanf(fp,"%s %c %d",courseIdentifier[i],&semOffered[i],&p);
    

    这并不能修复你的程序,但它确实允许程序完成。

    请考虑改变问题标题。@橡树,我不认为现在是否重要,这是否是一个家庭作业。问题是相当清楚的,并且代码显示,O/P在发布之前已经做出了合理的努力来解决他们的问题。你看到的是“它不产生输出”,你需要更多的信息。如果你熟练使用调试器,将一个调试器连接到你的代码上,并逐步完成。除此之外,还有一个更丑陋但更简单的解决方案-在代码中添加大量printf。具体来说,在程序流可能发生变化的任何地方添加它(即
    if
    for
    while
    switch
    语句),并在每个函数的开始和结束处。您可以打印出感兴趣的变量或只是数字,以显示程序流程。这可能会帮助您找到问题,或至少为我们提供更多详细信息以帮助您。请不要在你能把这个问题归结为一个简单的问题吗?请考虑改变题目。“橡树,我不认为现在是否重要,这是一个家庭作业。问题是相当清楚的,并且贴出的代码显示O/P在发布之前已经做出了合理的努力来解决他们的问题。你看到的是“它不产生输出”,你需要更多的信息。如果你熟练使用调试器,将一个调试器连接到你的代码上,并逐步完成。除此之外,还有一个更丑陋但更简单的解决方案-向你的代码中添加大量printf。特别是,在程序流可能发生变化的任何地方添加它(即
    if
    for
    while
    switch
    语句),并在每个函数的开始和结束处。您可以打印出感兴趣的变量或只是数字,以显示程序流程。这可能会帮助您找到问题,或至少为我们提供更多详细信息以帮助您。请不要在(你能把这一点归结为你所遇到问题的一个简明例子吗?