- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试找到解决初始化时间表问题的方法,必须打印每个 oldpop
的 days[][]
才能成功生成新的时间表。
每个位置(以天为单位)必须包含一个数字,其中10位显示房间号,一个位显示>主题编号。房间号数组由房间可用或空闲的每个小时组成,任何小时和日期的组合都会告诉我们房间是否空闲,即 =0 或已占用 =1。同样,科目数组告诉我们每个科目每周必须教授多少次。
这段代码中有很多未使用的变量,请忽略它们,我稍后会实现它们。我还想为极其错误的缩进表示歉意。目前时间有限,我无法纠正该问题。
#include<stdio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<ctype.h>
#include <time.h>
#define MAXP 10 //population size (best if chosen between 10-15)
struct pop{
int days[5][9];
int faculty;
int students;
int subjects[6];
int labs[2];
int rooms[9][5][9];
int labaratory[9][2];
int obj;
} old_pop[MAXP],benchmark;
int random_number_creator(int upper, int lower)
{
int n;
n = rand() % (upper-lower)+ lower;
return n;
}
void initialize_days(struct pop b)
{
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<9;j++)
if(j!=5)
b.days[i][j]=0;
else
b.days[i][j]=11111;
}
}
void initialize_benchmark(struct pop b)
{
int i,j,k;
for(i=0;i<5;i++)
{
for(j=0;j<9;j++)
if(j!=5)
b.days[i][j]=0;
else
b.days[i][j]=11111;
}
b.faculty=9;
b.students=100;
for(i=0;i<6;i++)
{
if(i<4)
b.subjects[i]=3;
else
b.subjects[i]=2;
}
for(i=0;i<2;i++)
{
b.labs[i]=3;
}
for(i=0;i<9;i++)
{
for(j=0;j<5;j++)
for(k=0;k<9;k++)
if(i!=5)
b.rooms[i][j][k]=0;
}
for(i=6;i<9;i++)
{
for(j=0;j<8;j++)
b.labaratory[i][j]=0;
}
}
int check_avail_days(struct pop p, int b)
{
int j,count=0;
for(j=0;j<9;j++)
{
if(p.days[b][j]==0)
count+=1;
}
return (count);
}
int check_avail_hours(struct pop b,int d)
{
int i,count=0;
for(i=0;i<9;i++)
{
if(b.days[d][i]==0)
count+=1;
}
return count;
}
int hours_alloter(struct pop b,int d)
{
int i,j=0;
int arr[9]={0,0,0,0,0,0,0,0,0};
for(i=0;i<9;i++)
{
if(b.days[d][i]==0)
{
arr[j]=i;
j++;
}
}
int n;
n=random_number_creator(j,0);
return arr[n];
}
int availble_room(struct pop b,int s, int r, int q)
{
if(b.rooms[s][r][q]==0)
return 1;
else
return 0;
}
void initpop()
{
int i,j,count=0, a=0;
for(i=0;i<MAXP;i++)
old_pop[i].obj=0;
for(i=0;i<MAXP;i++)
{
initialize_benchmark(benchmark);
initialize_days(old_pop[i]);
do{
printf("\nloop 1 entery\n");
int subject1,ss,fa=benchmark.faculty,h1;
for(subject1=random_number_creator(6,0);benchmark.subjects[subject1]>=0;benchmark.subjects[subject1]--)
{
printf("\nloop 2 entery\n");
int cou=1,r;
ss=subject1*10;
while(cou!=0&&benchmark.subjects[subject1]!=0&&fa!=0)
{
printf("\nloop 3 entery\n");
int d=random_number_creator(6,0),hi;
cou=check_avail_hours(benchmark,d);
hi=hours_alloter(benchmark,d);
old_pop[i].days[d][h1]=ss;
do
{
printf("\nloop 4 entery\n");
r=random_number_creator(9,0);
if(availble_room(benchmark,r,d,hi)==1)
{
benchmark.rooms[r][d][hi]=1;
old_pop[i].days[d][hi]+=r;
benchmark.faculty-=1;
fa++;
a++;
}
else
continue;
}while(a==0);
}
old_pop[i].faculty=fa;
}
for(i=0;i<6;i++)
{
count+=benchmark.subjects[i];
}
}while(count!=0);
}
}
int main()
{
initpop();
int i,j,k;
for(i=0;i<MAXP;i++)
{
printf("\nPop %d\n",i);
for(j=0;j<5;j++)
{ printf("\n");
for(k=0;k<9;k++)
printf(" %d",old_pop[i].days[j][k]);
}
}
return 0;
}
代码陷入无限循环,使我无法理解逻辑错误。
随机生成 10 个时间表,每个位置在 10 的位置指定房间号,在 1 的位置指定主题编号。即,52 表示第 5 个房间和第 2 个主题
最佳答案
主要错误是您忽略了函数的struct
参数是按值传递的,即。 e.
initialize_benchmark(benchmark);
initialize_days(old_pop[i]);
将benchmark
和old_pop[i]
的副本传递给initialize_…
函数,其中只有这些副本填充所需的值(并在函数返回时丢弃),而全局基准
和old_pop[]
保持为零。我们必须将这些调用更改为
initialize_benchmark(&benchmark);
initialize_days(&old_pop[i]);
以及指向指针的函数参数类型
void initialize_days(struct pop *b)
void initialize_benchmark(struct pop *b)
以及这些函数中每次出现b.
到b->
。之后就可以继续调试程序了。
关于c - 遗传算法、群体初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56857459/
我试图找出理论上能够相处的尽可能多的 friend 群体,即群体中的每个人都应该至少认识群体中其他人的 50%。 我正在尝试为此提出一种算法,该算法不会花费太长的时间; Facebook 的 API/
我正在开发一个应用程序,用户可以在其中将图片上传到服务器,然后向他们选择的人员发送带有显示这些图片的链接的电子邮件。 我的问题是关于在数据库中组织人员(我正在使用 MySQL)。 我希望每个用户都有这
我有一个评级数据框,其中包含 userId、movieId、rating 行。我想找到评分最高的用户。 这是我写的代码: import pandas as pd ratings = pd.read_c
我有一个脚本,单击时会显示更多信息,再次单击时会隐藏信息。问题是,当单击时,它会显示和隐藏具有相同类名的所有 div 的信息,而不仅仅是被单击的 div。我环顾四周,我认为我需要在其中的某处添加“th
我是一名优秀的程序员,十分优秀!