gpt4 book ai didi

c - 应用回溯算法寻找毕业的最小学期数

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:48 25 4
gpt4 key购买 nike

enter image description here我正在从一个文件中获取输入,其中包含

  1. 每学期的类(class)数量和最大允许类(class)数
  2. 所有类(class)名称(最多 5 个字母数字)
  3. 学校名称、提供的 sem、先修类(class)数量、先修类(class)。
  4. -1 和 -1 最后输出将是完成所有类(class)的最少学期数。

这是我的代码,所以你知道我已经完成了工作。我的代码正在编译和执行,但没有显示完成类(class)的 sems 数量。请告诉我哪里做错了

#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;
}

最佳答案

当您在此处扫描您的输入以获取有关每个提供的类(class)的信息时:

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

&semOffered 参数不正确。您需要提供指向 char 的指针。由于 semOffered 是一个 char 数组,您可能打算将它存储到索引位置:

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

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

关于c - 应用回溯算法寻找毕业的最小学期数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17575696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com